【问题标题】:MVC5 User not authenticated under httpMVC5 用户未在 http 下进行身份验证
【发布时间】:2014-03-31 21:29:21
【问题描述】:

用户未被识别为来自 http 请求页面的身份验证。

我最近在我的网站上安装了 ssl。如果用户通过身份验证,我会在我的母版页上显示用户名。我注意到,当我使用 http 导航到页面时,我总是被注销。然后当我导航到登录页面时,我立即被正确识别。好像我的网站只能从 https 请求中读取身份验证 cookie。

我使用的是 ASP.Net MVC 5。我使用的是(大部分)默认的 Owins 身份验证堆栈。

这是正常行为吗?在非 ssl http 请求下我可以做些什么来识别我的用户?

【问题讨论】:

    标签: asp.net asp.net-mvc authentication ssl asp.net-mvc-5


    【解决方案1】:

    详细信息可在此页面中找到: http://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net-developer/

    我从这里复制了该页面的部分文本:

    ================================================ =======================

    默认情况下(可能是为了简单和易于开发),如果传入的请求是 SSL,cookie 仅使用安全标志(即需要 SSL)发出。当您将应用程序发布到生产环境时,这是一个需要更改的重要设置。此设置使用枚举配置:

    public enum CookieSecureOption
    {
       SameAsRequest,
       Never,
       Always
    }
    

    并将通过此配置更改完成(注意 CookieSecure 标志):

    public void ConfigureAuth(IAppBuilder app)
    {
       app.UseCookieAuthentication(new CookieAuthenticationOptions
       {
          AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
          LoginPath = new PathString("/Account/Login"),
          CookieSecure = CookieSecureOption.Always
       });
    }
    

    ==================================

    我已复制此 CookieSecure 属性的文档,如下所示:


    确定 cookie 是否应仅在 HTTPS 请求上传输。如果正在执行登录的页面也是 HTTPS,则默认设置是将 cookie 限制为 HTTPS 请求。如果您有一个 HTTPS 登录页面并且您的网站的某些部分是 HTTP,您可能需要更改此值。

    所以,我将 CookieSecure 的值更改为 CookieSecure = CookieSecureOption.Never,这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多