共享表单身份验证 cookie 不适用于子域

Shared Forms Auth cookie not working on subdomain

我有一个域 www.foo.com 和子域 www.bar.foo.com。用户在 www.foo.com 登录并被重定向到 www.bar.foo.com。子域上的站点是不同的网站,即使在对主域和子域的后续请求中正确传递了 cookie,子域上的身份验证也不起作用。

两个站点共享相同的机器密钥信息,两个站点的 Web 配置配置为:

www.foo.com:

<authentication mode="Forms">
  <forms timeout="120" protection="All" slidingExpiration="true" name=".authcookie" domain=".foo.com" />
</authentication>

www.bar.foo.com:

<authentication mode="Forms">
  <forms loginUrl="http://www.foo.com" timeout="120" protection="All" slidingExpiration="true" name=".authcookie" domain=".foo.com"/>
</authentication>

如您所见,cookie 名称设置正确,并且我已在 fiddler 中确认 cookie 已在对两个域的所有请求上正确发送,但在服务器端 www.bar.foo.com 请求未正确发送认证。除了 cookie 名称和机器密钥之外,是否还需要设置任何其他内容以允许子域上的两个站点共享一个身份验证 cookie?

编辑 - 在 windows 事件日志中找到:

Event code: 4005
Event message: Forms authentication failed for the request. Reason: The ticket supplied was invalid. 
Event time: 19/02/2015 15:25:34 
Event time (UTC): 19/02/2015 15:25:34 
Event ID: 96e946d72f6b4fd3b5748e985aee7c50 
Event sequence: 27 
Event occurrence: 9 
Event detail code: 50201 

这意味着票证加密有问题

编辑 2:我忘了说,目前这仍在开发中,所以即使它们是两个不同的网站,它们都托管在我的本地机器上

更新:我已经尝试重新生成机器密钥,因为这显然已经解决了一些用户的问题,但对我来说并不愉快

尝试删除前导 .在您的表单身份验证域设置中:

domain="foo.com"

这个问题是因为子域指向的项目的 web 配置中的 http 运行时版本设置不同。我删除了行:

<httpRuntime targetFramework="4.5.1" />

来自网络配置并完成了工作