欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

FormsAuthentication.Decrypt 解密保存的登录cookie信息报错

程序员文章站 2022-03-13 11:36:59
 在处理单点登录系统(比如a.xxx.com),使用的mvc开发的 ,令牌存储在formscookie中,cookie值使用了FormsAuthenticationTicket保存数...

 在处理单点登录系统(比如a.xxx.com),使用的mvc开发的 ,令牌存储在formscookie中,cookie值使用了FormsAuthenticationTicket保存数据信息,采用FormsAuthentication.Encrypt(authTicket)加密,设置了共域参数(domain="xxx.com"),现在有一个新的站点子系统(b.xxx.com)需要接入, 当在配置文件中设置authentication节点并且是Forms模式,但是却无法获取到这个cookie,当修改authentication节点配置为None模式后就能获取到这个cookie了,但是当使用FormsAuthentication.Decrypt(cacheTicket)解密时却报错了

 
System.Security.Cryptography.CryptographicException: Error occurred during a cryptographic operation.
   at System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func, Byte[] input)
   at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket)


百度找了许多答案,如下列举大家可以尝试,但是我都尝试了不行

1、.net framework版本不兼容问题,多个系统的版本不一样导致,尝试了修改各个系统的版本,但是没有解决

2、authentication 验证model的问题,尝试了各个模式设置,没有解决

3、后来在本地测试,发现本地iis上是可以实现单点的,能成功读取cookie信息。


总结想了一下,可能是服务器系统环境或iis环境哪里有问题?但是不可能去动这些东西,服务器是不方便动的,后面就放弃了。

最后只能换一种实现方式,去掉了FormsAuthenticationTicket保存数据信息,直接json序列化后,采用aes加密方法,把信息设置到cookie中,最后解决。