MVC5用户未在http下验证

时间:2014-02-28 03:36:48

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

用户未被识别为从http请求的页面进行身份验证。

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

我正在使用ASP.Net MVC 5.我正在使用(大多数)默认的Owins身份验证堆栈。

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

1 个答案:

答案 0 :(得分:4)

详情可在此页面找到: 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 属性的文档,如下所示:


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

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