Jwt索赔名称

时间:2018-04-24 23:48:04

标签: asp.net-core asp.net-identity claims-based-identity

在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&#34 ;;

我不知道何时到达不同的地方。为什么在第二种情况下使用网址?

1 个答案:

答案 0 :(得分:2)

通常,Dotnet框架和Dotnetcore内的身份表示都使用System.Security.Claims.ClaimTypes枚举。声明类型字符串来自WS- *时代和Windows Identity Foundation。我认为由于向后兼容性,它没有改变。

System.IdentityModel.Tokens.Jwt.JwtRegisteredClaimNames代表较新协议的声明类型。

因此,如果您使用较新的协议(OAuth,OpenId Connect),您也可以使用JwtRegisteredClaimNames。有时您可能需要在两种声明类型之间进行映射。

此外,sub通常是唯一标识符,对于您可以使用FamilyNameGivenName名称的唯一属性。

您也可以定义自己的声明类型。