表单身份验证跨应用程序没有cookie

时间:2013-12-04 21:37:48

标签: c# asp.net asp.net-mvc cookies forms-authentication

我有两个申请。第一个是需要身份验证的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实例上运行。

1 个答案:

答案 0 :(得分:8)

所有奇怪的行为都是由于每个应用程序之间的httpRuntime不同。我的MVC应用程序设置为4.5,而我设置cookie的应用程序是4.0。显然,加密在幕后发生了变化,因此当cookie通过管道时,它会因为ASP.NET无法解密而被剥离。

当我手动尝试通过将name属性设置为不同来解密cookie时,我遇到了这个问题。这样我可以访问cookie并尝试dectypt,但在那时我会得到一个例外。

我发现以下链接让我朝着正确的方向前进:Sharing a cookie between two websites on the same domain

通过在机器密钥上设置兼容模式设置,cookie可以很好地解密。