JWT Claim Names - PullRequest
       65

JWT Claim Names

0 голосов
/ 25 апреля 2018

Что такое стандартизированный способ именования претензий в ASPNetCore?

Например, я использую следующее для создания JWT, но я бы хотел извлечь из него строки.

var claims = new[]
                                {
                    new Claim("UserName", user.UserName),
                    new Claim("UserId", user.Id),
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                    new Claim("AppUserId", appUser.Id.ToString()),
                    new Claim("TenantId", user.TenantId.ToString())
                    };

Для этого существует два разных класса dotnetcore:

 `System.IdentityModel.Tokens.Jwt.JwtRegisteredClaimNames`
 `System.Security.Claims.ClaimTypes`

Какие из них я должен использовать?

JwtRegisteredClaimNames выглядят так: public const string Sub = "sub"; Принимая во внимание, что ClaimTypes выглядит следующим образом: public const string Name = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name";

Я не понимаю, когда по-другому. Почему URL во втором случае?

1 Ответ

0 голосов
/ 25 апреля 2018

Как правило, представления идентичности внутри платформы Dotnet и Dotnetcore используют перечисление System.Security.Claims.ClaimTypes. Строка типа заявки пришла из эры WS- * и Windows Identity Foundation. Я думаю, что это не изменилось из-за обратной совместимости.

System.IdentityModel.Tokens.Jwt.JwtRegisteredClaimNames представляют типы заявок из более новых протоколов.

Так что, если вы используете более новые протоколы (OAuth, OpenId Connect), вы также можете использовать JwtRegisteredClaimNames. Иногда вам может потребоваться сопоставить два типа заявок.

Кроме того, sub обычно является уникальным идентификатором, поскольку ни одно уникальное свойство, такое как имя, вы можете использовать FamilyName или GivenName.

Вы также можете определить свои собственные типы требований.

...