【问题标题】:Shared Forms Auth cookie not working on subdomain共享表单身份验证 cookie 不适用于子域
【发布时间】:2015-04-20 17:22:15
【问题描述】:

我有一个域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:我忘了提及,目前这仍处于开发阶段,因此即使它们是两个不同的网站,它们都托管在我的本地计算机上

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

【问题讨论】:

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


    【解决方案1】:

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

    domain="foo.com"

    【讨论】:

    • 感谢大卫,但 cookie 已正确发送到两个域的请求。从日志来看,解密它似乎是一个问题。无论如何我都会听从你的建议,因为我认为现在有一个前导点在技术上是无效的,但不幸的是它并没有解决问题
    【解决方案2】:

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

    <httpRuntime targetFramework="4.5.1" />
    

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

    【讨论】:

    • 谢谢!!!这为我修好了。我想知道这种交互到底在哪里记录?! stackoverflow.com/questions/32595234/…
    • 非常感谢 - 我花了几天时间研究这个问题,但我阅读的任何文档似乎都没有表明这是一个因素!
    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2011-11-23
    • 2018-02-17
    • 2021-12-11
    相关资源
    最近更新 更多