如何解决对用户进行身份验证后如何将附加值从 Identity Server 4 传递给 MVC 客户端
身份验证成功后,我们如何将附加数据从 Identity Server 4 传递给客户端应用程序以作为响应?
我们使用 Identity Server 4 作为我们的应用程序的身份验证服务器,以具有用户身份验证和 SSO 功能。用户信息被存储并由外部服务进行身份验证。 IDS 调用外部服务进行用户认证。认证成功后,服务将响应返回给 IDS,其中包含 2 个参数:
- 授权码
- 用户的其他信息(属性集合)。
IDS 进一步生成 Id 令牌并将响应返回给具有标准用户声明的 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 上搜索 Claims Transformation 以了解更多详细信息。您还可以查看 this 篇文章。
要阻止它在 ID 令牌中包含声明,您可以在客户端定义中将 AlwaysIncludeUserClaimsInIdToken 属性设置为 false 并设置:
options.GetClaimsFromUserInfoEndpoint = true
在客户端 (AddOpenIdConnect)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。