FormsAuthentication.SetAuthCookie在MVC 5中没有[授权]

时间:2014-10-28 16:23:52

标签: c# asp.net-mvc authentication authorization

我创建了一个全新的ASP.NET MVC 5项目,用[Authorize]来测试FormsAuthentication.SetAuthCookie属性。我只是在一个动作中设置一个cookie(在我的Home控制器中):

    public ActionResult About()
    {
        FormsAuthentication.SetAuthCookie("someUser", false);

我限制访问另一个:

    [Authorize]
    public ActionResult Contact()
    {

当我启动网页并导航到/home/contact时,我被正确地重定向到了登录页面。然后我转到/home/about,获取我的cookie,然后返回联系页面。但是我仍然被重定向到登录页面 - 该cookie不会对我进行身份验证/授权。

在调试器中,HttpContext.User.Identity.IsAuthenticated == false当我多次加载“关于”页面时(也就是说,即使在设置了身份验证cookie之后,它也从未将我视为已经过身份验证)。

这里必须要做一些额外的步骤吗?我不应该为基本身份验证设置自己的IPrincipal,我应该吗?

4 个答案:

答案 0 :(得分:47)

从web.config中删除:

<modules>
  <!--<remove name="FormsAuthenticationModule" />-->
</modules>

或简单删除该行 在web.config中

答案 1 :(得分:13)

编辑:我不知道MVC5违反了删除表单身份验证的新项目(该模块已被删除),因此请确保您在原始帖子下检查DSR的评论,以及所有这些。

检查你的web.config并查找身份验证部分,它看起来应该是这样的,

<authentication mode="Forms">
  <forms loginUrl="..." cookieless="UseCookies" />
</authentication>

http://msdn.microsoft.com/en-us/library/1d3t3c61%28v=vs.85%29.aspx

默认的无Cookie值是&#34; UseDeviceProfile&#34;这意味着如果浏览器报告它支持cookie,则使用cookie,否则不使用cookie,它使用查询字符串中的值来维护经过身份验证的状态(需要在回发时保留)。

其次,确保您的浏览器中已启用Cookie。如果设备/浏览器不支持cookie或关闭它们,则SetAuthCookie将对URL进行更改,但您必须在使用...调用SetAuthCookie后重定向浏览器...

FormsAuthentication.RedirectFromLoginPage(String, Boolean)...

该方法在使用SetAuthCookie进行身份验证后将页面重定向到其目标位置。 RedirectFromLoginPage将在url查询中放置所需的属性,以维护回发时的登录会话。如果您在网站上进行自己的重定向,则需要通过检查当前用户是否使用HttpContext.Current.User.Identity.IsAuthenticated进行身份验证来维护该url查询参数。[/ p>

为了将您的用户发送到您应该使用的登录页面

FormsAuthentication.RedirectToLoginPage()

该方法将一个returnUrl参数添加到查询字符串中,后面的函数&#34; RedirectFromLoginPage&#34;将在经过身份验证后重定向回来。

如果阻止对web.config中包含位置元素的用户或角色访问路径和资源,则表示身份验证会在未经过身份验证的用户尝试访问登录页面时自动重定向到登录页面。

  <location path="SomeFolderOnYourSite">
    <system.web>
      <authorization>
        <deny users="?"/>
        <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>

答案 2 :(得分:0)

 <location path="SomeFolderOnYourSite">
<system.web>
  <authorization>
    <deny users="?"/>
    <allow roles="Administrators"/>
  </authorization>
</system.web>

当我使用相同的代码进行小改动时,

对我来说不起作用**<location path="~/SomeFolderOnYourSite"> <system.web> <authorization> <deny users="?"/> <allow roles="Administrators"/> </authorization> </system.web> </location>**

答案 3 :(得分:-1)

为form标签的domain属性指定错误的值也可能导致这种情况。

<authentication mode="Forms">
  <forms domain="localhost" ... />
</authentication>