/ / ASP.NET TicketDataFormat.Unprotect (cookieValue) zwraca wartość null - .net, uwierzytelnianie, szyfrowanie, pliki cookie, asp.net-core

ASP.NET TicketDataFormat.Unprotect (cookieValue) zwraca null - .net, uwierzytelnianie, szyfrowanie, pliki cookie, asp.net-core

Usiłuję odszyfrować plik cookie uwierzytelniania ustawiony przez inną aplikację .NET 4.6.2 MVC, która została utworzona w następujący sposób:

            TicketDataFormat = new AspNetTicketDataFormat(
new DataProtectorShim(
DataProtectionProvider.Create(new DirectoryInfo(@"C:Keys"))
.CreateProtector("blah")))

To właśnie robię, aby go odszyfrować:

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

To działało dobrze, dopóki nie zacząłemniektóre modyfikacje tożsamości. Stworzyłem nowy IdentityUser, który dziedziczy z IdentityUser, więc mogę dodać kilka dodatkowych pól. Czy nie może teraz odczytać tożsamości?

Dzięki

Odpowiedzi:

1 dla odpowiedzi № 1

Rozwiązałem to dzięki wielu grom.

Okazało się, że jest to połączenie następujących problemów:

  • Dostarczony ciąg znaków i cele podrzędnemetoda CreateProtector DataProtectionProvider nie została ustawiona na „Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware”, „Cookies”, „v2”. Po prostu miałem je jako kolejną wartość ciągu, jak w przypadku czytania dokumentów, myślałem, że to może być dowolny ciąg, o ile są takie same między aplikacjami, które muszą udostępniać plik cookie.

  • Jedna z aplikacji korzystała z wersji 1.1.2 pakietu Microsoft.AspNetCore.DataProtection NuGet, natomiast druga korzystała z wersji 1.1.1. Zaktualizowałem wersję 1.1.1 -> 1.1.2.

Wszystko wydaje się teraz działać dobrze. Tak więc posiadanie niestandardowej tożsamości użytkownika w jednej aplikacji, która nie znajduje się w drugiej, nie ma znaczenia, plik cookie może być nadal rozumiany i wyciągany jest identyfikator roszczenia.