从http请求的页面无法识别用户已通过身份验证。

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

我正在使用ASP.Net MVC5。我正在使用(主要是)默认的Owins身份验证堆栈。

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

最佳答案

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

我已经在这里复制了此页面的部分文本:

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

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

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,这解决了我的问题。

09-12 08:32