【问题标题】:get Id ( not clientId) from keycloak jwt token从 keycloak jwt 令牌获取 ID(不是 clientId)
【发布时间】:2021-10-08 10:39:36
【问题描述】:

JWT 只给出了用户信息和 clientId,我怎样才能得到客户端的 ID,如图所示

我可以从这个 URL 获取客户详细信息,特别是 ID https://${SERVER_URL}/auth/admin/realms/master/clients?clientId=test

API 响应

  {
    "id": "12af651d-f6fe-49ef-8e6f-b951a49ff7db", // want to add this id into JWT
    "clientId": "test",
    "rootUrl": "${authBaseUrl}", ......
}

但我想保存我的 api 调用以获取 Id

如何在 jwt 中获取客户信息“Id”? 现在这显示在 jwt 的提取上

{
  exp: 1627981808,
  iat: 1627974608,
  sub: '923666de-0b37-42f0-b694-0491028d0b78', // user Id
  typ: 'Bearer',
  azp: 'test', // client id 
  acr: '1',
  scope: 'openid email profile',
  email_verified: false,
  name: 'name123',
  preferred_username: 'name123',
  given_name: 'name123',
  email: 'any_name@gmail.com'
}

任何帮助/信息都会对我有所帮助。

【问题讨论】:

标签: keycloak keycloak-rest-api clientid


【解决方案1】:

您应该创建一个 SPI 并将其部署到您的 keycloak 实例。这是一个覆盖标准行为的 JAR。文档和 GitHub keycloak repo 中都描述了各种 SPI。 使用该 SPI,您几乎可以将任何内容添加到您的令牌中。我建议不要更改默认令牌中存在的任何内容,因为这可能会影响您的 OID 兼容性。

查看更多详情 herehere

【讨论】:

  • 为什么不能使用标准映射器?理论上,可以通过映射器添加具有静态客户端 uuid 的声明。这将只是客户端配置更改,因此不需要自定义 SPI 开发/部署。
  • @JanGaraj 您的解决方案可能对我有用,请您详细说明我该如何实现,谢谢
  • @TanzeelSaleem keycloak.org/docs/latest/server_admin/#_protocol-mappers - 创建已用客户端 Mapper Type: Hardcoded claim 的新映射器并根据您的需要配置其余选项 - 这是非常幼稚/简单的解决方案。 Javali 的方案也是有效的,但是很高级。
  • @JanGaraj 很好用。但我需要手动添加这个映射器。这可以通过任何来源自动化吗?当客户端创建其硬编码声明时还添加映射器?他们有这方面的 API 吗?
猜你喜欢
  • 2020-05-05
  • 2021-07-05
  • 2018-06-17
  • 1970-01-01
  • 2018-03-25
  • 2020-09-29
  • 2021-07-12
  • 1970-01-01
  • 2018-03-04
相关资源
最近更新 更多