共享表单Auth cookie不在子域上工作

时间:2015-02-19 11:24:38

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

我有一个域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名称和机器密钥之外还有什么需要设置以允许子域上的两个站点共享一个auth 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:我忘了提及,目前这仍然是开发者,所以即使他们是两个不同的网站,他们都在我的本地机器上托管

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

2 个答案:

答案 0 :(得分:3)

问题是由于http运行时版本在子域指向的项目的Web配置中设置不同而引起的。我删除了该行:

<httpRuntime targetFramework="4.5.1" />

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

答案 1 :(得分:0)

尝试删除潜在客户。在您的域身份验证中设置:

domain="foo.com"