这里的情况:
- 网站A,ASP.NET MVC 4 Web应用程序。 域: http://a.example.com
- 网站B,ASP.NET MVC 4万维网应用程序。 域: http://b.example.com
我想分享网站之间的一个cookie(窗体身份验证)。
我不使用每本身表单验证。 我使用的是内置的方法(加密,解密,等等),但我设置自己的自定义的cookie。
当我设置Cookie的网站之一,其他的人看到了饼干,但不能解密。 错误是“加密操作过程中出现错误”一般。
什么我保证:
- 该cookie设置为“example.com”域(这意味着子域可以访问,证明是其他网站可以“看到”的cookie)。
- 这两个网站共享同一台机器密钥。 两者的Web.config先后为decryptionKey和validationKey的值相同。
- 窗体身份验证票证版本和cookie的名称是在这两个网站是相同的。
- 该路径设置为“/”。
我以前这样做,它工作正常,但在这种情况下这两个应用程序都共享相同的代码库。
在这种情况下,它们是单独的应用程序。 这是因为我是原型设计解决方案,其中在同一个顶级域名两个独立于平台的应用程序可以共享一个身份验证cookie。
谁能告诉我什么,我缺少的,或者提供一个替代解决方案。
我读过的所有相关问题,但得到的答复通常为2)以上。
当你创建一个新的ASP.NET 4.5(如ASP.NET MVC 4)应用程序,以下行被添加到web.config中:
<httpRuntime targetFramework="4.5" />
这是不存在于我的其他应用程序,可能是因为我的其他应用程序是一个ASP.NET 3.5应用程序,它已升级到4.5。
删除这条线在新的ASP.NET Web应用程序解决了这一问题。
我认为这是由于兼容性模式值: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx
Framework45。 加密增强对ASP.NET 4.5已生效。 这是默认值,如果应用程序Web.config文件中有设置为“4.5”的httpRuntime元素的targetFramework属性。
不知道我是如何得到消除该行解决了这个问题。 我想申请一个都有不同的兼容性模式,因为它没有那么httpRuntime
元素。
处理这种情况的最好办法是使的machineKey解密回落到Framework20SP2
从这篇文章: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx
只需添加属性的machineKey在.NET 4.5的应用程序
<machineKey validationKey="" decryptionKey="" validation="SHA1" compatibilityMode="Framework20SP2" />
你将不再需要从现在删除的httpRuntime = targetFramework“4.5”。