【问题标题】:Get the user roles with the keycloak userinfo endpoint使用 keycloak userinfo 端点获取用户角色
【发布时间】:2020-01-19 16:23:51
【问题描述】:

如何获取 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")

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

【问题讨论】:

  • 如果您未解析 accessToken,则您分配给的所有客户端都有用户角色。 stackoverflow.com/questions/38552003/…
  • Bumblebee,我可以在这里帮助你,但我需要更多细节,所以有几个问题: 1. 你能看到解码令牌中的角色吗? - 尝试jwt.io 解码您的令牌 2. 您如何尝试从令牌中提取字段 -​​ 通过 javascript 库或 Java 库?
  • tryingToLearn,是的,我可以在 jwt.io 中解码令牌,也可以看到角色。我想提取 Qt5 C++ 应用程序中的字段。

标签: keycloak openid-connect


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    应该是这个问题: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.rolesrealm_accessy.roles(并将Add to userinfo 设置为ON),它包含在用户信息中:-/

    【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 添加到用户信息已启用。
    【解决方案4】:

    对于那些上面的答案不起作用的人,我花了一整天的时间弄清楚。
    基本上,您必须转到客户端范围->角色->然后移动到映射器选项卡,选择客户端角色添加到 Id 令牌、访问令牌和用户信息上

    这是截图

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 2021-11-01
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多