以前的单点登录系统(a.xxx.com)使用的mvc3.0 ,令牌存储在formscookie中,cookie值使用了FormsAuthentication.Encrypt(authTicket)加密,设置了跨域(domain="xxx.com"),然后现在一个新的运营系统(b.xxx.com)使用的mvc5.0 当在配置文件中设置authentication节点并且是Forms模式,但是却无法获取到这个cookie,当我去掉authentication节点配置后却能获取到这个cookie了,但是当我当我使用FormsAuthentication.Decrypt(cacheTicket)解密时却报错了
[CryptographicException: 在执行加密操作时出错。]
System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func, Byte[] input) +178
System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) +792
通过fidder 抓包 可以看到 a.xxx.com 登录成功将 cookie A 写入了浏览器,并且在请求b.xxx.com时发送了这个cookie A 到b站点 但是b站点通过Request获取不到这个cookie,当我将web.config 节点
<authentication mode="Forms">... </authentication>
去掉时却可以获取到这个cookie,但是却解密报错了
记得别人说过FormsAuthentication加密好像多台服务器会有问题
解决了,<httpRuntime targetFramework="4.5" requestValidationMode="2.0" /> 将【targetFramework="4.5"】去掉 应该是.net framework 4.0和4.5 不兼容引起的
谢谢,终于解决了。
楼主 同样的问题 修改httpRuntime 去掉targetFramework="4.5" 仍报错 无法验证数据。