在同一域的两个网站之间共享 cookie

Posted

技术标签:

【中文标题】在同一域的两个网站之间共享 cookie【英文标题】:Sharing a cookie between two websites on the same domain 【发布时间】:2013-02-02 09:21:47 【问题描述】:

情况如下:

网站 A,ASP.NET MVC 4 Web 应用程序。域名:http://a.example.com 网站 B,ASP.NET MVC 4 Web 应用程序。域名:http://b.example.com

我正在尝试在网站之间共享一个 cookie(表单身份验证)。

我没有使用表单身份验证本身。我正在使用内置方法(加密、解密等),但我正在设置自己的自定义 cookie。

当我在其中一个网站上设置 cookie 时,其他网站会看到 cookie,但无法解密。错误是一般的“加密操作期间发生错误”。

我所保证的:

    cookie 的域设置为“example.com”(这意味着子域可以访问。证明是其他网站可以“看到”cookie)。 两个网站共享相同的机器密钥。两者的 web.config 具有相同的解密密钥和验证密钥值。 两个网站的表单身份验证票证版本和 cookie 名称相同。 路径设置为“/”。

我以前做过这个,它工作正常,但在那种情况下,两个应用程序共享相同的代码库。

在这种情况下,它们是单独的应用程序。这是因为我正在设计一个解决方案原型,其中同一***域上的两个独立于平台的应用程序可以共享一个身份验证 cookie。

谁能告诉我我缺少什么,或提供替代解决方案。

我已阅读所有相关问题,但答案通常是上面的 2)。

【问题讨论】:

【参考方案1】:

当您创建新的 ASP.NET 4.5(例如 ASP.NET MVC 4)应用程序时,将以下行添加到 web.config:

<httpRuntime targetFramework="4.5" />

这在我的其他应用程序中不存在,可能是因为我的其他应用程序是升级到 4.5 的 ASP.NET 3.5 应用程序。

在新的 ASP.NET Web 应用程序中删除该行解决了问题。

我认为这是由于兼容性模式值: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

框架45。 ASP.NET 4.5 的加密增强功能已生效。如果应用程序 Web.config 文件将 httpRuntime 元素的 targetFramework 属性设置为“4.5”,则这是默认值。

不确定我是否明白删除该行如何解决问题。我假设应用程序一具有不同的兼容性模式,因为它没有 httpRuntime 元素。

【讨论】:

感谢 RPM 我们刚才在 Pluralsight 遇到了同样的问题。完全与兼容模式有关。 我在两个使用 .NET 4.5.1 的网站上看到了同样的问题。一个有targetFramework 属性,另一个(不久前从.NET 3.5 升级)没有。在第二个网站中添加属性解决了这个问题。 @RPM1984 ,我面临类似的问题 - 请帮助***.com/questions/34506551/…【参考方案2】:

处理这个问题的最佳方法是让机器密钥解密回退到 Framework20SP2

来自这篇文章:http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

只需将该属性添加到您的 .net 4.5 应用程序中的 machinekey

<machineKey validationKey="" decryptionKey="" validation="SHA1" compatibilityMode="Framework20SP2" />

您现在不需要从 httpruntime 中删除 targetFramework="4.5"。

【讨论】:

@Mandeep ,对我来说它不起作用 - 请帮助 - ***.com/questions/34506551/…

以上是关于在同一域的两个网站之间共享 cookie的主要内容,如果未能解决你的问题,请参考以下文章

域和子域之间的 Firebase 身份验证共享

两个系统之间怎么实现单点登录?

使用 IIS express 在域和子域之间共享 cookie

跨子域共享 ASP.NET cookie

Node.js使用cookie

在与一个 IIS 应用程序连接的两个域之间共享 OWIN 身份验证 Cookie