【问题标题】:FormsAuthentication Decrypt In Asp.Net CoreAsp.Net Core 中的 FormsAuthentication 解密
【发布时间】:2020-03-01 22:57:21
【问题描述】:

我们有多个带有单点登录的 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 Identity

//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;

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core encryption


    【解决方案1】:

    不,您之前所做的依赖于两个应用程序共享相同的机器密钥,因此它们都以相同的方式加密/解密。 ASP.NET Core 不支持机器密钥的概念,也不使用它们进行加密。相反,它使用数据保护提供程序。因此,无法解密 ASP.NET Core 中基于机器密钥在 ASP.NET 应用程序中加密的值。句号。

    也就是说,ASP.NET Core 中使用的数据保护提供程序概念可以在 ASP.NET 中使用,但这显然需要您更改当前设计以利用数据保护提供程序进行加密/decrypt 而不是您当前的方法。然后,假设提供程序在所有应用程序中配置相同,那么您将能够在 ASP.NET Core 中解密。即,要求数据保护提供商使用的密钥环位于所有应用程序都可以访问的共享位置,并且所有应用程序都配置为使用相同的应用程序名称。

    请参阅documentation 了解如何设置。该文档适用于 cookie 共享和身份验证,但这实际上是关于共享加密方案的,因此设置文档中提到的数据保护位就足够了。

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      相关资源
      最近更新 更多