在 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?
最佳答案
通常,Dotnet framework 和 Dotnetcore 内部的身份表示都使用 System.Security.Claims.ClaimTypes
枚举。声明类型字符串来自 WS-* 时代和 Windows Identity Foundation。我认为它不会因为向后兼容性而改变。System.IdentityModel.Tokens.Jwt.JwtRegisteredClaimNames
表示来自较新协议(protocol)的声明类型。
因此,如果您使用较新的协议(protocol)(OAuth、OpenId Connect),您可以使用
JwtRegisteredClaimNames
也是。有时您可能需要在两种声明类型之间进行映射。另外,
sub
通常是唯一标识符,对于没有唯一属性(如您可以使用的名称)FamilyName
或 GivenName
.您也可以定义自己的声明类型。
关于asp.net-core - Jwt 声明名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50012155/