【问题标题】:ASP.NET TicketDataFormat.Unprotect(cookieValue) returns nullASP.NET TicketDataFormat.Unprotect(cookieValue) 返回 null
【发布时间】:2017-07-26 20:02:26
【问题描述】:

我正在尝试解密由另一个 .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,这样我就可以添加一些额外的字段。是不是现在读取身份失败了?

谢谢

【问题讨论】:

    标签: .net authentication encryption cookies asp.net-core


    【解决方案1】:

    我已经通过很多游戏解决了这个问题。

    原来是以下问题的组合:

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

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

    现在似乎一切正常。因此,在一个应用中拥有自定义用户身份而在另一个应用中不存在并不重要,仍然可以理解 cookie 并提取 ClaimsIdentity。

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      相关资源
      最近更新 更多