我已将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
包含一个似乎镜像JwtClaimTypes
的ClaimTypes
。为什么用Jwt前缀命名?
IdentityServer ClaimType constants只是OpenID Connect standard claims的图。
您最好为这些常量创建自己的类,因为您说引入完全的Identity Server 3包没有意义,我认为它们在任何其他包中都不可用...
[请注意,声明是通过JWT中的JSON作为蛇形案例出现的。例如,FamilyName将是family_name。
您可以安装Microsoft.AspNetCore.Authentication.JwtBearer
软件包。它包括Microsoft.AspNetCore.Authentication.JwtBearer
结构,您可以像这样使用它:
JwtRegisteredClaimNames
同意Scott Brady的观点,最好的方法是创建常量类。为此,我们创建了一个共享库,其中包含声明类型常量,并已在服务器和客户端项目中使用它们。
NB:除'id_token'和'sub'声明类型外,您可以在'IUserService'的实现中使用自定义声明类型。这也使声明类型名称更加清晰,因为您可以根据实现使用特定的名称。