【问题标题】:Jwt Claim NamesJwt 声明名称
【发布时间】:2018-04-24 23:48:04
【问题描述】:

在 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`

我应该使用哪些?

JwtRegisteredClaimName 如下所示:public const string Sub = "sub"; 而 ClaimTypes 看起来像这样: public const string Name = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name";

我不知道什么时候不同。为什么是第二种情况的url?

【问题讨论】:

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


    【解决方案1】:

    一般来说,Dotnet 框架和 Dotnetcore 内部的身份表示都使用System.Security.Claims.ClaimTypes 枚举。声明类型字符串来自 WS-* 时代和 Windows Identity Foundation。我认为它不会因为向后兼容性而改变。

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

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

    另外,sub 通常是一个唯一标识符,对于像名称这样的唯一属性,您可以使用FamilyNameGivenName

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

    【讨论】:

    • 这不是一个真正的选择。 Microsoft 颁发的令牌遵循 System.Security.Claims.ClaimTypes 命名空间中列出的名称;我不认为这取决于您使用的客户端框架,正如一个简单的邮递员请求所证明的那样。
    猜你喜欢
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多