/ / ASP.NET TicketDataFormat.Unprotect (cookieValue) devuelve nulo - .net, autenticación, cifrado, cookies, asp.net-core

ASP.NET TicketDataFormat.Unprotect (cookieValue) devuelve nulo - .net, autenticación, cifrado, cookies, asp.net-core

Estoy tratando de descifrar una cookie de autenticación establecida por otra aplicación .NET 4.6.2 MVC que se creó con lo siguiente en el Startup.Auth:

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

Esto es lo que estoy haciendo para tratar de descifrarlo:

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

Esto estaba funcionando bien hasta que empecé a hacerAlgunas personalizaciones de identidad. He creado un nuevo IdentityUser que se hereda de IdentityUser solo para poder agregar algunos campos adicionales. ¿Es posible que ahora no se lea la identidad?

Gracias

Respuestas

1 para la respuesta № 1

He resuelto esto jugando mucho.

Resultó ser una combinación de los siguientes problemas:

  • Las cadenas de propósito y sub propósito proporcionadas ael método DataProtectionProvider CreateProtector no se estableció en "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Cookies", "v2". Simplemente los tuve como otro valor de cadena a partir de la lectura de los documentos. Pensé que esto podría ser cualquier cadena, siempre y cuando fueran iguales entre las aplicaciones que necesitaban compartir la cookie.

  • Una de las aplicaciones estaba usando la versión 1.1.2 del paquete Microsoft.AspNetCore.DataProtection NuGet, mientras que la otra estaba usando la versión 1.1.1. Actualicé el 1.1.1 -> 1.1.2.

Todo parece funcionar bien ahora. Por lo tanto, tener una identidad de usuario personalizada en una aplicación que no esté en la otra no importa, la cookie todavía se puede entender y se puede extraer una ClaimsIdentity.