#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);
}
}
}
Комментарии:
1. Процесс сопоставления выполняется на
ClaimsPrincipal
уровне, а не на уровне токенов.ReadJwtToken
Метод не выполняет преобразование. Для этого вам нужно использовать один из методов, возвращающих значение aClaimsPrincipal
, напримерValidateToken
.2. Большое спасибо! Это хорошая деталь, которую стоит знать. Я это проверю.