共享表单验证cookie在子域上不起作用



我有一个域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:我忘了提一下,目前这还在开发中,所以即使它们是两个不同的网站,它们都托管在我的本地机器上

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

没有什么好处

问题是由于子域所指向的项目的http运行时版本在web配置中设置不同。我删除了以下行:

<httpRuntime targetFramework="4.5.1" />

从web配置,这完成了

尝试删除前导。在域设置中进行表单身份验证:

domain="foo.com"

最新更新