【问题标题】:clientId missing from resource_access field in jwt token when using impersonation使用模拟时 jwt 令牌中的 resource_access 字段中缺少 clientId
【发布时间】:2021-11-08 19:53:21
【问题描述】:

我正在使用 Keycloak 14.0.0 并启用了 token_exchange 的功能预览以进行模拟。在 Keycloak 中将我的用户配置为在客户端“领域管理”上扮演模拟角色后(根据 [文档][1]),进行令牌交换的实际请求失败,因为令牌无效。

经过一些调试,发现 jwt 令牌确实格式错误:

...
  "session_state": "a03aeg0e-b5ce-4a50-9038-c339e50338c4",
  "acr": "1",
  "allowed-origins": [
    "http://0.0.0.0:9180"
  ],
  "scope": "openid identity_provider email admin profile company",
  "permissions": [
    "consented-readonly",
    "readonly",
    "trackingdisabled"
  ],
  "resource_access": {
    ".roles": [
      "impersonation"
    ]
  },
  "email_verified": false,
  "idp": "myidp",
...

在上面,请注意“.roles”。我认为这是不正确的。它应该是这样的:

"resource_access": {
    "myclient": {
      "roles": [
      "impersonation"
      ]
    }

如何解决这个问题? [1]:https://www.keycloak.org/docs/latest/securing_apps/index.html#impersonation

【问题讨论】:

    标签: jwt keycloak access-token impersonation


    【解决方案1】:

    原来映射器的配置不正确。在这种情况下,它是“客户端角色”映射器(客户端范围 -> 角色 -> 映射器 -> keycloak ui 中的客户端角色),在我的 keycloak 设置中,它具有以下值:

    resource_access..roles
    

    这是不正确的,因为它应该包含一个 clientId 占位符,如下所示:

    resource_access.${client_id}.roles
    

    在此更改后,accessToken 包含实际客户端,从而在 accessToken 中生成有效的 json

    【讨论】:

      猜你喜欢
      • 2022-10-12
      • 1970-01-01
      • 2021-05-22
      • 2020-06-07
      • 2019-09-12
      • 2016-03-08
      • 2020-01-03
      • 2018-08-29
      • 1970-01-01
      相关资源
      最近更新 更多