非管理员用户的KeyCloak RTP令牌

问题描述 投票:0回答:1

我正在尝试在本质上处理受保护资源的 API 中实现 Keycloak 授权。我在 KeyCloak 中创建了一个启用了授权的机密客户端的后端。如果请求用户是管理员,则该流程有效,否则将返回 403 Forbidden。

每当将新资源添加到我的后端(或者删除或修改现有资源)时,KeyCloak 客户端也会通过 KeyCloak API 进行更新。为了授予或拒绝对特定资源和用户的访问,我的方法如下(我是新手,并不真正知道我在做什么):

  1. 用户在前端进行身份验证(KeyCloak 中存在非机密客户端)并获取常用的 OAuth 访问令牌(标准身份验证代码流程)
  2. 用户从我的后端请求资源并提供他的访问令牌
  3. 后端使用从用户收到的访问令牌和 grant_type urn:ietf:params:oauth:grant-type:uma-ticket 向 KeyCloak 端点请求 RTP 令牌
  4. KeyCloak 使用包含该特定用户拥有的所有权限的访问令牌进行响应
  5. 后端检查token是否有效,解码并解析权限

现在我认为一切都按计划进行,但问题是这仅在请求用户是管理员时才有效。如果我在步骤 4 中使用非管理员用户,我会收到 403 Forbidden:

{ "error": "access_denied", "error_description": "not_authorized" }

相反,如果我使用角色“admin”请求 RTP 和访问令牌,则它可以正常工作。

有人可以指出我做错了什么吗?

谢谢!

oauth keycloak keycloak-services keycloak-rest-api keycloak-authorization-services
1个回答
0
投票

刚刚发现问题 - 在这里发布解决方案,因为它可能会帮助某人。

如果没有一个权限对该用户评估为肯定,KeyCloak 将返回一个

403 Forbidden
,而不是像我预期的那样,带有空授权部分的令牌或没有授权部分的令牌。 所以实际上一切都工作得很好,我只是不明白。

© www.soinside.com 2019 - 2024. All rights reserved.