Asp.net mvc 手动解密asp.net核心标识设置的Cookie
根据我从中学到的 我试着做类似的事情。唯一的区别是cookie是由asp.net核心标识设置的。下面是SetUp.cs中的内容:Asp.net mvc 手动解密asp.net核心标识设置的Cookie,asp.net-mvc,cookies,asp.net-core,asp.net-core-identity,Asp.net Mvc,Cookies,Asp.net Core,Asp.net Core Identity,根据我从中学到的 我试着做类似的事情。唯一的区别是cookie是由asp.net核心标识设置的。下面是SetUp.cs中的内容: services.AddIdentity<ApplicationUser, IdentityRole>( options => { options.Cookies.ApplicationCookie.AuthenticationScheme = "Cookies"; option
services.AddIdentity<ApplicationUser, IdentityRole>( options =>
{
options.Cookies.ApplicationCookie.AuthenticationScheme = "Cookies";
options.Cookies.ApplicationCookie.DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"c:\shared-auth-ticket-keys\"));
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
但我总是会遇到以下错误:
在密钥环中找不到密钥{******-***}
如何匹配密钥/dataProtectionProvider?您试图解密它们的具体原因是什么?另外,您确定您的数据保护密钥是同步的吗?e、 g.两个应用程序的存储速度是否相同?只是为了好玩和学习。我知道cookie中间件会自动解密它们。两个代码块都在同一个应用程序中,并且使用相同的文件夹/文件。您尝试解密它们的具体原因是什么?另外,您确定您的数据保护密钥是同步的吗?e、 g.两个应用程序的存储速度是否相同?只是为了好玩和学习。我知道cookie中间件会自动解密它们。两个代码块位于同一个应用程序中,并使用相同的文件夹/文件。
var cookies = HttpContext.Request.Cookies;
var provider = DataProtectionProvider.Create(new DirectoryInfo(@"c:\shared-auth-ticket-keys\"));
//Get a data protector to use with either approach
var dataProtector = provider.CreateProtector("Identity.Application", "Cookies", "v2");
//Get the decrypted cookie as plain text
UTF8Encoding specialUtf8Encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true);
foreach (var cookie in cookies)
{
byte[] protectedBytes = Base64UrlTextEncoder.Decode(cookie.Value);
byte[] plainBytes = dataProtector.Unprotect(protectedBytes);
string plainText = specialUtf8Encoding.GetString(plainBytes);
}