Keycloak - 用户信息响应中缺少数据

Posted

技术标签:

【中文标题】Keycloak - 用户信息响应中缺少数据【英文标题】:Keycloak - Missing data in the userinfo response 【发布时间】:2020-02-23 07:37:56 【问题描述】:

当我点击/auth/realms/realm/protocol/openid-connect/userinfo 时,我得到的关于用户的详细信息很少。


    "sub": "ed291f7a-a799-4d8b-a776-e634d727668c",
    "email_verified": true,
    "preferred_username": "admin"

更多信息(例如角色列表)位于我实际发送到此端点的访问令牌中。我可以只解码访问令牌而不是点击这个端点,这是预期/正常的行为还是我做错了什么?

【问题讨论】:

请分享您发送到userinfo端点的请求 【参考方案1】:

通过执行以下操作,我设法将“客户端角色”和“领域角色”添加到 Userinfo 负载:

    转到客户端范围 > 角色映射器 > 领域角色 打开“添加到用户信息”,关闭“添加到令牌” 将“令牌声明名称”更改为您想要的任何名称,任何方法都可以

同样适用于客户端角色,1. 变为客户端范围 > 角色映射器 > 客户端角色注意:角色必须位于“范围”标签中的“已分配”列中

【讨论】:

【参考方案2】:

对我来说,解决方案是使用自定义 Token Claim Name 制作自定义映射器。 realm_access.roles 来自预定义映射器的 fsr 不起作用

【讨论】:

【参考方案3】:

响应中的字段由访问令牌中的声明限定。

Keycloak 符合 OpenID。

OpenID 规范defines:

UserInfo 端点是一个 OAuth 2.0 保护资源,它返回 关于经过身份验证的最终用户的声明。获取请求的 关于最终用户的声明,客户端向 UserInfo 发出请求 使用通过 OpenID Connect 获得的访问令牌的端点 验证。这些声明通常由 JSON 对象表示 包含声明的名称和值对的集合。

Section 5.1 中定义的声明可以返回,同样可以 此处未指定的其他声明。

【讨论】:

以上是关于Keycloak - 用户信息响应中缺少数据的主要内容,如果未能解决你的问题,请参考以下文章

如何通过ID获取其他用户信息(用户名,名字)? [Keycloak]

Prisma with Next-Auth,用户创建失败导致Keycloak的api响应键名

如何在不使用 rest admin api 的情况下以编程方式(java)更新 keycloak 的用户详细信息?

Keycloak 创建和修改自定义用户信息

如何在 keycloak 中验证令牌并获取用户详细信息?

Keycloak 未返回完整的用户详细信息