Constants.ClaimTypes的引用

问题描述 投票:5回答:3

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

我有一个单独的MVC客户端,该客户端使用Cookies和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引用,但是似乎没有一个可以复制ClaimTypes中的Thinktecture.IdentityServer.Core.Constants。我发现的最好的是System.Security.Claims.ClaimTypes,但似乎有几个遗漏的地方,例如FamilyName

我看过的第一个地方是Thinktecture.IdentityModel,但很惊讶这些地方不存在。

那么魔术参考是什么?还是只为这些字符串加载Thinktecture.IdentityServer3是否合适?

谢谢

编辑:所以我发现Thinktecture.IdentityModel.Client包含一个似乎镜像JwtClaimTypesClaimTypes。为什么用Jwt前缀命名?

identityserver3
3个回答
4
投票

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

您最好为这些常量创建自己的类,因为您说引入完全的Identity Server 3包没有意义,我认为它们在任何其他包中都不可用...

[请注意,声明是通过JWT中的JSON作为蛇形案例出现的。例如,FamilyName将是family_name。


1
投票

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

JwtRegisteredClaimNames

0
投票

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

NB:除'id_token'和'sub'声明类型外,您可以在'IUserService'的实现中使用自定义声明类型。这也使声明类型名称更加清晰,因为您可以根据实现使用特定的名称。

© www.soinside.com 2019 - 2024. All rights reserved.