Request.IsAuthenticated在https和http页面上返回不同的值

时间:2014-06-12 19:24:33

标签: asp.net asp.net-mvc

我使用asp.net mvc 5.1,asp.net identity 2.0创建了一个项目。在我将其部署到IIS后,当我转到安全页面“https://www.xxxx.com/Account/Login”时,登录后,如果我转到https://www.xxxx.com。 Request.IsAuthenticated在_LoginPartial.cshtml页面上返回true,但转到http://www.xxxx.com,始终返回false。

2 个答案:

答案 0 :(得分:1)

听起来您可能将选项设置为仅通过HTTPS发送身份验证Cookie,因此,如果您通过HTTP导航到某个页面,则不会发送身份验证Cookie,并且应用程序会认为您未经身份验证。

有问题的设置是requireSSL部分中的system.web/authentication/forms

<authentication mode="Forms">
  <forms name="auth" loginUrl="~/login" requireSSL="true" />
</authentication>

,它控制是否在身份验证cookie上使用secure属性。

由于您使用的是HTTPS,我建议您不要通过HTTP导航网站。

答案 1 :(得分:0)

RequireSSL只允许通过https传输cookie。如果您有此特定要求,则需要在代码中采取额外的预防措施。

但请注意,此时您正在做的事情。

您可以在适当的位置使用Request.IsSecureConnection。这可以在模块中或在过滤器上或过滤器中的基类中。

这里有一篇过时的文章,但可以作为指针。 http://r2d2.cc/2011/08/05/how-to-switch-between-http-and-https-in-asp-net-mvc2-and-allow-ajax-requests-from-site-master/

警告:请谨慎使用,因为您可能需要在服务器上采取额外的预防措施以避免劫持。