JwtSecurityTokenHandler не сопоставляет претензии OIDC с претензиями Microsoft

#c# #.net #asp.net-core #jwt

Вопрос:

У меня есть токен JWT, который содержит утверждения OIDC (роли). Я использую JwtSecurityTokenHandler его для чтения и анализа токена. В моем понимании обработчик должен использовать InboundClaimTypeMap для сопоставления утверждений OIDC с утверждениями Microsoft.

OIDC role => Microsoft http://schemas.microsoft.com/ws/2008/06/identity/claims/role

Но этого не происходит, претензии всегда имеют тип OIDC. Я что-то упускаю?
Любая помощь будет признательна!

 using System;
using System.IdentityModel.Tokens.Jwt;
                    
public class Program
{
    public static void Main()
    {
        var jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE2MjI2MzI4MzYsImV4cCI6MTY1NDE2ODgzNiwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsImdpdmVuX25hbWUiOiJKb2hubnkiLCJzdXJuYW1lIjoiUm9ja2V0IiwiZW1haWwiOiJqcm9ja2V0QGV4YW1wbGUuY29tIiwicm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.eWjHJ3sw1M34tsmBrbAenunx_rRaFRtZW_8TZ--BhAc";
        var handler = new JwtSecurityTokenHandler();
        var token = handler.ReadJwtToken(jwt);
        
        foreach (var claim in token.Claims)
        {
            Console.WriteLine(claim.Type);
        }
    }
}
 

Запуск в .NET Fiddle

Комментарии:

1. Процесс сопоставления выполняется на ClaimsPrincipal уровне, а не на уровне токенов. ReadJwtToken Метод не выполняет преобразование. Для этого вам нужно использовать один из методов, возвращающих значение a ClaimsPrincipal , например ValidateToken .

2. Большое спасибо! Это хорошая деталь, которую стоит знать. Я это проверю.