在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 ;;
我不知道何时到达不同的地方。为什么在第二种情况下使用网址?
答案 0 :(得分:2)
通常,Dotnet框架和Dotnetcore内的身份表示都使用System.Security.Claims.ClaimTypes
枚举。声明类型字符串来自WS- *时代和Windows Identity Foundation。我认为由于向后兼容性,它没有改变。
System.IdentityModel.Tokens.Jwt.JwtRegisteredClaimNames
代表较新协议的声明类型。
因此,如果您使用较新的协议(OAuth,OpenId Connect),您也可以使用JwtRegisteredClaimNames
。有时您可能需要在两种声明类型之间进行映射。
此外,sub
通常是唯一标识符,对于您可以使用FamilyName
或GivenName
名称的唯一属性。
您也可以定义自己的声明类型。