从 keycloak jwt 令牌获取 ID(不是 clientId)
Posted
技术标签:
【中文标题】从 keycloak jwt 令牌获取 ID(不是 clientId)【英文标题】:get Id ( not clientId) from keycloak jwt token 【发布时间】: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.org/docs-api/15.0/rest-api/index.html - 您可以使用管理员 REST API 创建客户端/映射器 【参考方案1】:您应该创建一个 SPI 并将其部署到您的 keycloak 实例。这是一个覆盖标准行为的 JAR。文档和 GitHub keycloak repo 中都描述了各种 SPI。 使用该 SPI,您几乎可以将任何内容添加到您的令牌中。我建议不要更改默认令牌中存在的任何内容,因为这可能会影响您的 OID 兼容性。
查看更多详情 here 和 here。
【讨论】:
为什么不能使用标准映射器?理论上,可以通过映射器添加具有静态客户端 uuid 的声明。这将只是客户端配置更改,因此不需要自定义 SPI 开发/部署。 @JanGaraj 您的解决方案可能对我有用,请您详细说明我该如何实现,谢谢 @TanzeelSaleem keycloak.org/docs/latest/server_admin/#_protocol-mappers - 创建已用客户端Mapper Type: Hardcoded claim
的新映射器并根据您的需要配置其余选项 - 这是非常幼稚/简单的解决方案。 Javali 的方案也是有效的,但是很高级。
@JanGaraj 很好用。但我需要手动添加这个映射器。这可以通过任何来源自动化吗?当客户端创建其硬编码声明时还添加映射器?他们有这方面的 API 吗?以上是关于从 keycloak jwt 令牌获取 ID(不是 clientId)的主要内容,如果未能解决你的问题,请参考以下文章
使用带有spring security的keycloak JWT令牌时如何修复403