未实现 Keycloak 模拟 API

Posted

技术标签:

【中文标题】未实现 Keycloak 模拟 API【英文标题】:Keycloak impersonation API not implemented 【发布时间】:2019-08-14 14:25:11 【问题描述】:

我一直在尝试使用 Keycloak Impersonation API(最近添加的)来获取另一个用户的访问令牌。我基于docs 和另一个*** question 创建了一个半成功的CURL 请求。 CURL 请求(下面)返回一个501 Not Implemented,我正在尝试解决这个问题。如果这是另一个错误,我会假设我做错了什么,但这似乎至少部分正确。

curl --verbose -X POST "http://localhost:8081/auth/realms/master/protocol/openid-connect/token" \
 -H "Content-Type: application/x-www-form-urlencoded" \
 --data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
 -d "client_id=admin-cli" \
 -d "requested_subject=TARGET_USER_ID" \
 -d "subject_token=USER_MANAGER_TOKEN"

到目前为止,我的工作流程是获取 Keycloak 主领域“管理员”用户的访问令牌(成功)并在模拟请求中使用它以及目标用户的 Keycloak ID。我是做错了什么还是漏了一步?

我没有更改任何 Keycloak 权限,这是必需的吗?

根据我的理解和文档,Keycloak v5 - Sever Installation 目前支持并默认启用模拟。但是,另一篇文章(Keycloak v5 - Token Exchange)似乎表明该功能默认禁用;这就是我收到501 Not Implemented 的原因吗?

编辑: @qdivision 提到需要启用令牌交换才能使其工作。但是,我们使用的是 jboss/keycloak Docker 映像,我想知道应该在哪里添加 profile.properties 文件以启用此功能?

【问题讨论】:

【参考方案1】:

默认启用模拟,Token Exchange 未启用。

如文档中所述启用使用-Dkeycloak.profile=preview-Dkeycloak.profile.feature.token_exchange=enabled 启动服务器

https://www.keycloak.org/docs/latest/securing_apps/index.html#_token-exchange

【讨论】:

啊,谢谢你的澄清。这会是501 Not Implemented 错误的原因吗?另外,你知道在使用jboss/keycloak Docker 镜像时如何使用这些命令启动服务器吗? 是的,它会导致501。我使用docker-compose并设置环境变量。对于直接 docker run 尝试类似docker run -it --env JAVA_OPTS="-Dkeycloak.profile=preview" jboss/keycloak 通过阅读文档,我看到我可以使用配置文件标志启动服务器或添加profile.properties 文件(我的偏好)。只是好奇你是否知道因为我们使用的是 Docker 映像而将其添加到哪里。 我更新了我之前的评论。也许这对你有用。我没有使用 profile.properties。对不起。 没问题,我们使用 Docker Compose 来运行 Docker 容器,所以我不确定在哪里可以指定这些命令。感谢您为我指明正确的方向!

以上是关于未实现 Keycloak 模拟 API的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak:为错误的客户模拟铸造令牌

使用 Keycloak 时模拟“生成 API 令牌”的最佳实践

keycloak 8 登录更新密码 ftl 文件未加载

Keycloak 未返回完整的用户详细信息

Keycloak - 自定义 SPI 未出现在列表中

未定义的 Keycloak 属性 Authenticated 和 UserInfo