在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";
索赔型看起来像这样:public const string name =" http://schemas.xmlsoap.org/ws/2005/2005/05/istentity/claims/name";
我什么时候没有得到。为什么在第二种情况下使用URL?
通常,dotnet框架和dotnetcore中的身份表示都使用System.Security.Claims.ClaimTypes
枚举。索赔类型字符串来自WS-* ERA和Windows Identity Foundation。我认为由于向后兼容而没有更改。
System.IdentityModel.Tokens.Jwt.JwtRegisteredClaimNames
表示新协议中的索赔类型。
- https://www.rfc-editor.org/rfc/rfc7519#section-4
- http://openid.net/specs/openid-connect-core-1_0.html#idtoken
因此,如果您使用的是新协议(OAuth,OpenID Connect(,也可以使用JwtRegisteredClaimNames
。有时您可能需要在两种索赔类型之间映射。
另外,sub
通常是唯一的标识符,对于无唯一的属性,例如您可以使用FamilyName
或GivenName
的名称。
您也可以定义自己的索赔类型。