作者:13205340728wan | 来源:互联网 | 2023-09-23 15:45
我们有多个具有Single Sign On的Asp.Net MVC应用程序,其中我们使用FormsAuthentication.Encrypt()方法传递加密的字符串,并将其作为查询字符串传递,并使用FormsAuthentication.Decrypt()解密相同的字符串。
由于两个站点都是在Asp.Net MVC中开发的,因此我们能够使用表单身份验证并能够解密字符串。
现在,我们正在Asp.Net Core中开发一个新项目,在该项目中,我们将经过加密的字符串作为来自Asp.Net MVC的查询字符串进行传递,并且必须在Asp.Net Core Web应用程序中进行解密。
是否有其他方法可以在Asp.Net Core中解密字符串
注意:我们没有使用Asp.Net身份
//Encryption
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,"Name",DateTime.Now,DateTime.Now.AddMinutes(60),true,"DataToEncrypt");
string encrypted = FormsAuthentication.Encrypt(ticket);
Response.Redirect("siteUrl?COOKIEName="+encrypted );
//Decryption
HttpCOOKIE authCOOKIE = Request.COOKIEs["COOKIEName"];
var formsAuthenticatiOnTicket= FormsAuthentication.Decrypt(authCOOKIE.Value);
string _userData = formsAuthenticationTicket.UserData;
不,您之前所做的工作取决于两个应用程序共享相同的机器密钥,因此它们都以相同的方式进行加密/解密。 ASP.NET Core不支持机器密钥的概念,也不将其用于加密。相反,它使用数据保护提供程序。因此,无法在ASP.NET Core中解密基于机器密钥在ASP.NET应用程序中加密的值。句号。
也就是说,ASP.NET Core 中使用的数据保护提供程序概念可以在ASP.NET中使用,但这显然需要您更改当前设计以利用数据保护提供程序进行加密/ decrypt,而不是当前的方法。然后,假定在所有应用程序中都对提供程序进行了相同的配置,则可以在ASP.NET Core中进行解密。也就是说,要求数据保护提供商使用的密钥环位于所有应用程序都可以访问的共享位置,并且所有应用程序都配置为使用相同的应用程序名称。
有关设置方法,请参考documentation。该文档既适用于COOKIE共享又适用于auth,但这实际上是关于共享加密方案的,因此设置文档中提到的数据保护位就足够了。