1

我有一个父 MVC 站点,它处理具有域 mysite.com 的登录。这基本上是开箱即用的模板 MVC Internet 应用程序 - 用户登录,它使用域 .mysite.com 设置一个 .ASPXAUTH cookie。

我还有另一个在 child.mysite.com 域上运行的 MVC 站点。我打算使用自定义表单身份验证从父设置的 cookie 中对用户进行身份验证。当我在 Firefox 中浏览到 child.mysite.com 时,我可以在 Firebug 中看到登录站点设置的 cookie,因此我知道子站点可以访问它,但我似乎无法从我的代码中检索此 cookie在子站点中。

我在 Global.asax 中实现 FormsAuthentication_OnAuthenticate,我希望 cookie 在 Request.Cookies 中可见,但那里没有 cookie。

如何访问 FormsAuthentication_OnAuthenticate 中父登录站点设置的 cookie?

4

1 回答 1

0

我想我找到了问题所在。子站点正在查找 cookie,但是当它试图解密它时,它出错了,因此没有完全验证。子网站上的这段代码会出错:

void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e)
{
    var cookie = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
}

错误是“填充无效且无法删除”,这是由于子站点无法解密父站点设置的 cookie。

答案是将 web.config 中 system.web 中的机器密钥设置为两个站点相同:

<machineKey 
    validationKey='241FF35BE3921690EBA492A89CC03719ECF5552D019448C44F8B28B01F546FCDC4AEDCD273380EB45BE8A49AFB9C14FE60BECF0B5ECBA4901C306875FED98DEA'
decryptionKey='864559FC58AC5FFB5B9581008552B4A873ACBE86469A81CB'
validation='SHA1'/>
于 2013-01-07T12:41:53.487 回答