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

标签 .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")))

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

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

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

谢谢

最佳答案

我已经通过大量的尝试解决了这个问题。

原来是以下问题的组合:

  • 提供给 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。

关于.net - ASP.NET TicketDataFormat.Unprotect(cookieValue) 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45307764/

相关文章:

php - 这个 PHP/MySQL 登录脚本安全吗?更新代码

android - 阻止非 Android 用户调用 JSON 服务

c - AES(aes-cbc-128、aes-cbc-192、aes-cbc-256)加密/解密,无需 openssl C

c# - 将 List<List<object>> 转换为 IList<IList<object>>

c# - 缺少 Microsoft 时区

c# - Visual Studio MacOS 错误 MSB4057 : The target "Build" does not exist in the project

python - 使用扩展将字节添加到字节数组时为"unicode argument without an encoding"

django - MongoEngine——如何为身份验证()自定义用户模型/自定义后端

PHP无法判断用户是否登录

php - 如何使用 PHP 的 OpenSSL 模块更改私钥的密码?