首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Constants.ClaimTypes参考

Constants.ClaimTypes参考
EN

Stack Overflow用户
提问于 2015-07-30 19:52:35
回答 3查看 7K关注 0票数 7

我已经将IdentityServer3作为独立的身份服务器运行。

我有一个单独的MVC客户端,它使用Cookie和OpenIdConnect进行身份验证。我正在尝试设置索赔转换,并希望引用不同的索赔类型,如下所示:

代码语言:javascript
复制
var givenName = id.FindFirst(Constants.ClaimTypes.GivenName);
var familyName = id.FindFirst(Constants.ClaimTypes.FamilyName);
var sub = id.FindFirst(Constants.ClaimTypes.Subject);
var roles = id.FindAll(Constants.ClaimTypes.Role);

在IdentityServer3上,我使用Thinktecture.IdentityServer.Core.Constants引用这些常量,但是在我的MVC客户端上,我认为我不应该仅仅为了这些字符串常量而引用Thinktecture.IdentityServer3?在这种情况下,是否有推荐使用的客户端库?我尝试过Thinktecture.IdentityModel和一些.NET参考,但似乎没有一个能够复制Thinktecture.IdentityServer.Core.Constants中的ClaimTypes。我找到的最好的是System.Security.Claims.ClaimTypes,但似乎缺少几个,例如FamilyName

我看到的第一个位置是Thinktecture.IdentityModel,但令人惊讶的是这些都不在那里。

那么神奇的参考是什么呢?或者只为这些字符串加载Thinktecture.IdentityServer3合适吗?

谢谢

编辑:我找到了Thinktecture.IdentityModel.Client,它包含一个看起来像ClaimTypesJwtClaimTypes。但是为什么要用Jwt前缀来命名呢?

EN

回答 3

Stack Overflow用户

发布于 2015-08-02 01:10:48

IdentityServer ClaimType constants只是OpenID Connect standard claims的地图。

您最好为这些常量创建自己的类,正如您所说的那样,引入完整的Identity Server3包是没有意义的,我认为它们在任何其他包中都不可用……

请注意,JWT中的声明是通过JSON实现的。例如,FamilyName将为family_name。

票数 8
EN

Stack Overflow用户

发布于 2020-02-09 03:42:23

您可以安装Microsoft.AspNetCore.Authentication.JwtBearer包。它包含JwtRegisteredClaimNames结构,您可以像这样使用它:

代码语言:javascript
复制
using static Microsoft.IdentityModel.JsonWebTokens.JwtRegisteredClaimNames;
⋮
var userId = User.FindFirstValue(Sub);
票数 3
EN

Stack Overflow用户

发布于 2015-08-05 17:19:05

同意Scott Brady的观点,最好的方法是创建constants类。为此,我们创建了一个共享库,其中包含声明类型常量,并在服务器和客户端项目中使用了它们。

注意:除了'id_token‘和'sub’声明类型之外,您还可以在'IUserService‘的实现中使用您的自定义声明类型。这也为声明类型名称提供了更好的清晰度,因为您可以根据实现使用特定的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31723062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档