Ampliando la respuesta de cooxkie y la respuesta de dpix , cuando está leyendo un token de jwt (como un access_token recibido de AD FS), puede combinar las notificaciones en el token de jwt con las notificaciones de "context.AuthenticationTicket.Identity" que podrían no tienen el mismo conjunto de notificaciones que el token jwt.
Para ilustrar, en un flujo de código de autenticación usando OpenID Connect, después de que un usuario está autenticado, puede manejar el evento SecurityTokenValidated que le proporciona un contexto de autenticación, luego puede usarlo para leer el access_token como un token jwt, luego puede " fusionar "tokens que están en access_token con la lista estándar de reclamos recibidos como parte de la identidad del usuario:
private Task OnSecurityTokenValidated(SecurityTokenValidatedNotification<OpenIdConnectMessage,OpenIdConnectAuthenticationOptions> context)
{
//get the current user identity
ClaimsIdentity claimsIdentity = (ClaimsIdentity)context.AuthenticationTicket.Identity;
/*read access token from the current context*/
string access_token = context.ProtocolMessage.AccessToken;
JwtSecurityTokenHandler hand = new JwtSecurityTokenHandler();
//read the token as recommended by Coxkie and dpix
var tokenS = hand.ReadJwtToken(access_token);
//here, you read the claims from the access token which might have
//additional claims needed by your application
foreach (var claim in tokenS.Claims)
{
if (!claimsIdentity.HasClaim(claim.Type, claim.Value))
claimsIdentity.AddClaim(claim);
}
return Task.FromResult(0);
}