ASP.NET TicketDataFormat.Unprotect(cookieValue) 返回 null

Top*_*don 4 .net authentication encryption cookies asp.net-core

我正在尝试解密另一个 .NET 4.6.2 MVC 应用程序设置的身份验证 cookie,该应用程序是在 Startup.Auth 中使用以下内容创建的:

            TicketDataFormat = new AspNetTicketDataFormat(
                new DataProtectorShim(
                    DataProtectionProvider.Create(new DirectoryInfo(@"C:\Keys\"))
                        .CreateProtector("blah")))
Run Code Online (Sandbox Code Playgroud)

这就是我正在尝试解密它的方法:

//  Create a data protector to facilitate in decrypting the cookie.
var provider = DataProtectionProvider.Create(new DirectoryInfo(keyDirectory));
var dataProtector = provider.CreateProtector(dataProtectorPurpose);

//  Decrypt the cookie, obtaining an authentication ticket.
var ticketDataFormat = new TicketDataFormat(dataProtector);
var ticket = ticketDataFormat.Unprotect(cookieValue);
Run Code Online (Sandbox Code Playgroud)

在我开始进行一些身份定制之前,这一切都运行良好。我创建了一个新的 IdentityUser,它继承自 IdentityUser,这样我就可以添加一些额外的字段。现在可能无法读取身份吗?

谢谢

Top*_*don 5

我通过大量的玩耍解决了这个问题。

事实证明这是以下问题的组合:

  • 提供给 DataProtectionProvider CreateProtector 方法的目的和子目的字符串未设置为“Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware”、“Cookies”、“v2”。我只是将它们作为阅读文档时的另一个字符串值,我认为这可以是任何字符串,只要它们在需要共享 cookie 的应用程序之间相同即可。

  • 其中一个应用程序使用 Microsoft.AspNetCore.DataProtection NuGet 包的版本 1.1.2,而另一个应用程序使用版本 1.1.1。我升级了 1.1.1 -> 1.1.2。

现在一切似乎都运转良好。因此,在一个应用程序中拥有另一个应用程序中没有的自定义用户身份并不重要,仍然可以理解 cookie 并提取 ClaimsIdentity。