使用 keycloak userinfo 端点获取用户角色

Bum*_*bee 9 openid-connect keycloak

如何获取 keycloak 中 userinfo 端点的回复中包含的角色。我在 keycloak 中为用户定义了一个“角色映射”。当我调用 userinfo 端点时,我得到了电子邮件名称等字段,但回复中不包含角色。当我调用 auth 端点时,我得到了 access_token 并且在字段范围中包含了角色。这是来自 auth 端点的回复:

access_token" QJsonValue(string, "eyJhb...")
"expires_in" QJsonValue(double, 300)
"not-before-policy" QJsonValue(double, 0)
"refresh_expires_in" QJsonValue(double, 1800)
"refresh_token" QJsonValue(string, "eyJhb...")
"scope" QJsonValue(string, "profile email roles")
"session_state" QJsonValue(string, "20b48536-4b38-4aa6-9072-e8309833402e")
"token_type" QJsonValue(string, "bearer")
Run Code Online (Sandbox Code Playgroud)

我还尝试使用属性“scope=roles”调用 userinfo 端点,但这不起作用。

Tor*_*mer 8

应该是这个问题:https://keycloak.discourse.group/t/resource-access-claim-missing-from-userinfo-until-i-change-the-name/1238

将 中的声明重命名为(并设置为 ON)时Client Scopes -> roles -> Mappers -> realm roles/client rolesrealm_access.rolesrealm_accessy.roles包含Add to userinfo在 userinfo 中:-/

  • 编辑:实际上,您可以将声明名称更改为与默认值相同并保存,然后它就可以工作,所以看起来声明名称默认值会显示,但在编辑之前不会使用。 (2认同)

han*_*cop 6

正如有人已经提到的,这是一个错误。我听说它已在最新版本的 keycloak 中修复。

我最终修复了这个设置,而没有升级到 keycloak 的固定版本。

当您添加用户领域角色时,它将具有“realm_access.roles”作为令牌声明名称。您需要将其更改为"roles"。然后它将在用户信息中正确显示。

在此处输入图片说明


小智 2

在 Keycloak 的映射器页面中,有一个名为 的设置Add to userinfo,必须启用它。