使用 Keycloak 中的自定义 Admin REST API 获取用户的 ID 令牌

Posted

技术标签:

【中文标题】使用 Keycloak 中的自定义 Admin REST API 获取用户的 ID 令牌【英文标题】:Get ID token of a user using custom Admin REST API in Keycloak 【发布时间】:2021-01-20 07:50:43 【问题描述】:

在我现在正在开发的系统中,我想使用 Keycloak 的 admin REST API 在我的 Keycloak 服务器中获取用户的 ID 令牌,而不知道用户的密码(即,仅使用管理员的密码)用户)。

也就是说,我想要一个管理 API GET /realm/users/id/id-token.

有可能实现这一点吗?

(Keycloak 的文档说可以实现自定义 API 端点 (https://www.keycloak.org/docs/latest/server_development/index.html#_extensions_rest), 但我不确定是否可以添加我想要的功能。)

【问题讨论】:

可能不适合您的用例,但您可能需要检查服务帐户(客户端凭据流)功能。您可以为服务帐户赋予角色(您需要为客户启用它,并且它必须是机密类型)。然后在您的后端,您可以使用客户端 ID 和客户端密码检索服务帐户的凭据,而不是模拟用户,然后使用这些凭据(令牌),您可以执行所需的调用。这样,进行数据操作的是服务,而不是模拟用户。 【参考方案1】:

这听起来像是一个非常危险的功能(IDP 管理员可以伪装成他的 IDP 用户池中的任何用户)。但是您仍然缺少一个输入-客户端。每个客户端可能会生成不同的令牌。

我会说你可能需要:

1.) 访问令牌功能示例(不是 ID 令牌!)

检查GET /realm/clients/id/evaluate-scopes/generate-example-access-token端点

https://www.keycloak.org/docs-api/11.0/rest-api/index.html

2.) 模拟功能

https://www.keycloak.org/docs/latest/server_admin/#impersonation

3.) 您可以在 Keycloak 中自行实现它,因此它完全符合您的需求。

【讨论】:

以上是关于使用 Keycloak 中的自定义 Admin REST API 获取用户的 ID 令牌的主要内容,如果未能解决你的问题,请参考以下文章

KeyCloak 中的自定义提供程序,可以根据用户名和密码进行身份验证

如何避免KeyCloak的登录页面,部署我们项目的自定义登录页面?

哪些角色允许 Keycloak 领域中的用户使用 Admin-REST-API?

有没有办法使用 Keycloak Admin REST API 将用户添加到 Keycloak 中的多个组(批量)?

Django admin 中的自定义验证

创建 keycloak 自定义主题