gpt4 book ai didi

java - Keycloak 无法使用服务帐户 token 获得具有权限的 RPT

转载 作者:行者123 更新时间:2023-12-05 07:20:10 25 4
gpt4 key购买 nike

我正在使用 Keycloak:4.8.3.Final

我在 Keycloak 中有以下客户端

  • 用户服务

  • 库存服务

InventoryService 在 Keycloak 中定义了一些资源并启用了授权。

UserService(作为服务帐户)在 service-account-roles 选项卡中分配了必要的客户端角色

每当有人试图访问 InventoryService 的 API 时,我都会执行以下操作:

  • 从授权 header 中获取访问 token
  • 获取 RPT(如前所述here)
  • 检查 RPT 是否存在所需的权限。

当 UserService 尝试访问 InventoryService 的 api 时,我收到以下错误响应

{
"error": "invalid_resource",
"error_description": "Resource with id [item] does not exist."
}

这是 java 中的代码片段。

当 UserService 尝试访问 InventoryService 的 api 时,我收到以下错误响应

AuthorizationResource authResource = authzClient.authorization(at);
AuthorizationRequest request = new AuthorizationRequest();
request.addPermission(resourceId, scopes);
AuthorizationResponse authResponse = authResource.authorize(request);
String rpt = authResponse.getToken();

当我删除行时request.addPermission(resourceId, scopes);我能够获得包含所有权限列表的 RPT。但如果我包含它,则会抛出上述错误。

顺便说一句,还有一个观察结果是:当 token 属于用户(而不是服务帐户)时,上面的代码片段可以正常工作。

谁能告诉我发生了什么事?这是 Keycloak 中的错误吗?

最佳答案

此问题在 KeyCloak 11.0.2 中仍然存在。服务帐户是 explicitly excluded在授权 token 服务中。

但是,您可以通过客户端上的协议(protocol)映射器将 azp 声明设置为 client_id 以外的内容来解决此问题。

protocol mapper on your client .

关于java - Keycloak 无法使用服务帐户 token 获得具有权限的 RPT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57591475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com