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 № 1Rozwią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.