我已经将IdentityServer3作为独立的身份服务器运行。
我有一个单独的MVC客户端,它使用Cookie和OpenIdConnect进行身份验证。我正在尝试设置索赔转换,并希望引用不同的索赔类型,如下所示:
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,它包含一个看起来像ClaimTypes的JwtClaimTypes。但是为什么要用Jwt前缀来命名呢?
发布于 2015-08-02 01:10:48
IdentityServer ClaimType constants只是OpenID Connect standard claims的地图。
您最好为这些常量创建自己的类,正如您所说的那样,引入完整的Identity Server3包是没有意义的,我认为它们在任何其他包中都不可用……
请注意,JWT中的声明是通过JSON实现的。例如,FamilyName将为family_name。
发布于 2020-02-09 03:42:23
您可以安装Microsoft.AspNetCore.Authentication.JwtBearer包。它包含JwtRegisteredClaimNames结构,您可以像这样使用它:
using static Microsoft.IdentityModel.JsonWebTokens.JwtRegisteredClaimNames;
⋮
var userId = User.FindFirstValue(Sub);发布于 2015-08-05 17:19:05
同意Scott Brady的观点,最好的方法是创建constants类。为此,我们创建了一个共享库,其中包含声明类型常量,并在服务器和客户端项目中使用了它们。
注意:除了'id_token‘和'sub’声明类型之外,您还可以在'IUserService‘的实现中使用您的自定义声明类型。这也为声明类型名称提供了更好的清晰度,因为您可以根据实现使用特定的名称。
https://stackoverflow.com/questions/31723062
复制相似问题