Asp.net mvc 手动解密asp.net核心标识设置的Cookie

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

根据我从中学到的 我试着做类似的事情。唯一的区别是cookie是由asp.net核心标识设置的。下面是SetUp.cs中的内容:

    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);
    }