【发布时间】:2013-12-21 14:23:12
【问题描述】:
我有两个应用程序。第一个是需要身份验证的 ASP.NET 4 MVC 应用程序。第二个是一个将处理身份验证并设置表单身份验证cookie的应用程序。
在授权应用上,我调用
FormsAuthentication.SetAuthCookie(username, false);
然后我做一个简单的 Response.Redirect 回到我的 MVC 应用程序。
在 MVC 应用程序中,我正在制作一个继承自 AuthorizeFilter 的自定义过滤器。在 OnAuthorization 方法上,我打算解密 cookie 并从授权用户那里获取一些额外的用户数据。
我的问题是,
HttpContext.Current.Request.Cookies
里面什么都没有。我已经检查了 fiddler,并且身份验证应用程序正确设置了 cookie,并且 MVC 应用程序获取了 cookie,但是当它到达我的过滤器时,那里什么都没有。
我的 web.config 在两个应用程序中都有完全相同的设置:
<forms
name=".ASPXFORMSAUTH"
protection="All"
path="/"
timeout="30"
enableCrossAppRedirects="true"
domain="localhost"/>
并且我已经使用相同的 machineKey 进行了设置,以便能够解密 cookie。问题是,我在 MVC 过滤器中的 OnAuthorization 方法中没有看到任何 cookie。
现在这两个应用程序都在我的本地 IIS 实例上运行。
【问题讨论】:
-
您说的是第二个请求中没有 cookie,对吗?
-
在我的身份验证应用程序上点击“登录”后,单击按钮会设置身份验证 cookie 并执行 Response.Redirect(MVCUrl) 在提琴手中我看到了 cookie,但在 MVC 授权过滤器中我是建设,我在 cookie 集合中找不到任何东西
-
所以,当您调用
FormsAuthentication.SetCookie... 时,cookie 肯定不会存在,但在随后的调用中它应该存在。也就是说,您应该能够在使用表单身份验证时使用现有的 AuthorizeAttribute -
是的,在我调用 cookie 之后,我可以在 fiddler 中看到它是为后续调用设置的。我正在制作自己的继承自 AuthorizeAttribute 的过滤器。我在要读取的身份验证 cookie 中设置了一些附加信息,但在 C# 代码中,cookie 集合为空。尽管我可以在提琴手上看到它至少是为了兜风而传递的。
-
所以...... asp.net 可能会在他们授权后剥离 cookie,但我不确定这一点。我所知道的是,您将无法向该 cookie 添加其他信息,因为它已被加密和散列以防止篡改(我认为您可以在 web.config 中禁用它......但我不推荐它)
标签: c# asp.net asp.net-mvc cookies forms-authentication