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

时间:2019-09-18 16:43:35

标签: keycloak openid-connect

如何获取在keycloak中userinfo端点的答复中包含的角色。我在密钥斗篷中为用户定义了“角色映射”。当我呼叫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")

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

我最终使用此设置进行了修复,而没有升级到密钥斗篷的固定版本。

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

enter image description here

答案 2 :(得分:1)

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