情况如下:
我正在尝试在网站之间共享Cookie(表单身份验证)。
我没有使用表格身份验证本身。我正在使用内置方法(加密,解密等),但我正在设置自己的自定义cookie。
当我在其中一个网站上设置cookie时,其他人会看到cookie,但无法解密。错误是通用“加密操作期间发生错误”。
我所确保的:
我以前做过这个并且它工作正常,但在这种情况下,两个应用程序共享相同的代码库。
在这种情况下,它们是单独的应用程序。这是因为我正在构建一个解决方案,其中同一顶级域上的两个独立于平台的应用程序可以共享身份验证cookie。
任何人都可以告诉我我缺少的东西,或提供替代解决方案。
我已经阅读了所有相关问题,但答案通常是2)。
答案 0 :(得分:39)
创建新的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
Framework45。 ASP.NET 4.5的加密增强功能正在生效。如果应用程序Web.config文件将httpRuntime元素的targetFramework属性设置为“4.5”,则这是默认值。
不确定我是如何删除该线解决问题的。我假设应用程序有一个不同的兼容性模式,因为它没有httpRuntime
元素。
答案 1 :(得分:14)
处理此问题的最佳方法是使machinekey解密回退到Framework20SP2
只需将该属性添加到.net 4.5应用程序中的machinekey
即可<machineKey validationKey="" decryptionKey="" validation="SHA1" compatibilityMode="Framework20SP2" />
您现在无需从httpruntime删除targetFramework =“4.5”。