Расширение на cooxkie ответ, и DPix ответ, когда вы читаете JWT маркер (например, access_token получил от AD FS), вы можете объединить требования в JWT маркер с претензий от «context.AuthenticationTicket.Identity» , что не может имеют тот же набор требований, что и токен jwt.
Чтобы проиллюстрировать, в потоке кода аутентификации с использованием OpenID Connect после аутентификации пользователя вы можете обработать событие SecurityTokenValidated, которое предоставляет вам контекст аутентификации, затем вы можете использовать его для чтения access_token как токена jwt, тогда вы можете " объединить токены, которые находятся в access_token, со стандартным списком утверждений, полученных как часть удостоверения пользователя:
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);
}