我正在使用Keycloak:4.8.3.Final
我在Keycloak中拥有以下客户端
UserService
InventoryService
InventoryService 具有在Keycloak中定义的一些资源并启用了授权。
UserService (作为服务帐户)在 service-account-roles 标签
中分配了必要的客户端角色每当有人尝试访问InventoryService的API时,我都会执行以下操作:
当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,范围); 我能够获得带有所有权限列表的RPT。但如果包含它,则会抛出上述错误。
顺便说一句,另外一个观察结果是:当令牌属于用户(而不是服务帐户)时,上述代码段可以正常工作。
能让我知道发生了什么吗?这是Keycloak中的错误吗?
答案 0 :(得分:0)
此问题在KeyCloak 11.0.2中仍然存在。服务帐户是授权令牌服务中的explicitly excluded。
不过,您可以通过客户端上的协议映射器将azp
声明明确设置为client_id
以外的其他内容来解决此问题。