如何在验证用户身份后将附加值从 Identity Server 4 传递给 MVC 客户端

How to pass additional values to MVC client from Identity Server 4 after authenticating user

我们如何在身份验证成功后将附加数据从 Identity Server 4 传递给客户端应用程序作为响应?

我们使用 Identity Server 4 作为我们的应用程序的 Auth 服务器,以具有用户身份验证和 SSO 功能。用户信息被存储并通过外部服务进行验证。 IDS 调用外部服务进行用户身份验证。身份验证成功后,服务 returns 使用 2 个参数返回 IDS 的响应:

  1. 授权码
  2. 用户的附加信息(属性集合)。

IDS 进一步生成 Id 令牌和 returns 响应返回给具有标准用户声明的 MVC 客户端。 我想将额外的用户信息(属性)传递给客户端应用程序以在页面上显示它。我们尝试通过 context.IssuedClaims 选项将属性添加为声明集合,但我仍然没有将这些属性添加到 MVC 客户端应用程序中的 User.Claims 集合。

任何人都可以建议我们可以将这些自定义属性传递给客户端应用程序的替代方法。通过索赔或任何其他方式(httpcontext.Items 收集等)

只有 IDS 提供的一些用户声明会被传递到 User.claims 集合中。您需要在客户端应用程序中显式映射这些附加声明,使用如下代码:

options.ClaimActions.MapUniqueJsonKey("website", "website");
options.ClaimActions.MapUniqueJsonKey("gender", "gender");
options.ClaimActions.MapUniqueJsonKey("birthdate", "birthdate");

请查看 ID 令牌中实际传递的内容以及 /UserInfo 端点提供的内容。大多数时候索赔都会在那里。

您可以google 了解更多详细信息的声明转换。您也可以看看 this 文章。

要阻止它在 ID 令牌中包含声明,您可以在客户端定义中将 AlwaysIncludeUserClaimsInIdToken 属性 设置为 false 并设置:

options.GetClaimsFromUserInfoEndpoint = true

在客户端中 (AddOpenIdConnect)。