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

最佳答案

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

当我手动尝试通过将name属性设置为不同来解密cookie时,我遇到了这个问题。这样,我可以访问cookie并尝试进行tytyty,但是到那时,我会得到一个异常(exception)。

我发现以下链接将我引向正确的方向:Sharing a cookie between two websites on the same domain

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

10-02 04:40
查看更多