7

我已经让 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);

在 IdentityServer3Thinktecture.IdentityServer.Core.Constants上,我使用 MVC 客户端引用这些,但我认为我不需要Thinktecture.IdentityServer3仅为这些字符串常量引用?在这种情况下是否有推荐使用的客户端库?我已经尝试过Thinktecture.IdentityModel一些 .NET 引用,但似乎没有一个可以复制ClaimTypesin Thinktecture.IdentityServer.Core.Constants。我发现的最好的是System.Security.Claims.ClaimTypes,但这似乎有几个缺失,例如FamilyName.

我看的第一个位置是Thinktecture.IdentityModel但很惊讶这些不在那里。

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

谢谢

编辑:所以我发现Thinktecture.IdentityModel.Client其中包含一个JwtClaimTypes似乎镜像的ClaimTypes. 为什么用 Jwt 前缀命名呢?

4

3 回答 3

8

IdentityServer ClaimType 常量只是OpenID Connect 标准声明的映射。

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

请注意,索赔是通过 JWT 中的 JSON 作为蛇案例出现的。例如,FamilyName 将是 family_name。

于 2015-08-01T17:10:47.523 回答
3

您可以安装该Microsoft.AspNetCore.Authentication.JwtBearer软件包。它包括JwtRegisteredClaimNames您可以使用的结构,例如:

using static Microsoft.IdentityModel.JsonWebTokens.JwtRegisteredClaimNames;
⋮
var userId = User.FindFirstValue(Sub);
于 2020-02-08T19:42:22.613 回答
1

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

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

于 2015-08-05T09:19:05.050 回答