0

我希望后端应用程序使用另一个后端服务的 API,并控制每个应用程序被授权在后端服务上调用的内容。我使用 OAuth 2.0 客户端凭据流和 Keycloak 作为授权服务器。我希望为后端服务定义并为后端应用程序设置的角色出现在我从 Keycloak 请求的访问令牌中。但我唯一能设法出现的是领域级别的客户端范围。

我尝试了以下方法(我不希望需要所有这些,但我想尝试任何有意义的事情):

  • 创建领域测试
  • 在领域中添加了客户端范围 (realm-clientscope1)
  • 在领域中添加了角色(领域角色 1,领域角色 2)
  • 定义客户端“后端服务”,使其成为“仅承载”客户端,因为它不必将自己授权给其他服务
  • 在此客户端上创建角色(backendservice-role1、backendservice-role2、backendservice-role3-comp)
  • 定义客户端“后端应用程序”,使其成为机密客户端,启用服务帐户
  • 在此客户端上添加角色 (backendapp-role1)
  • 将 realm-clientscope1 分配为默认范围
  • 在范围选项卡(后端应用范围映射)上,关闭“允许的完整范围”,分配领域角色 1、领域角色 2 和客户端角色 backendservice-role1、backendservice-role2、backendservice-role3-comp
  • 分配的服务帐户角色与范围选项卡上的角色相同(realm-role1、realm-role2 和客户端角色 backendservice-role1、backendservice-role2、backendservice-role3-comp)

毕竟,我使用 Postman 来获取 grant_type 客户端凭据的访问令牌。访问令牌上唯一的东西是领域范围“realm-clientscope1”。为什么所有这些选项来设置服务帐户角色等。如果它们没有出现?

我想我误解了角色的使用方式,但我也找不到合适的解释。

为了尝试覆盖所有基础,我还在“后端应用”客户端上启用了授权,并在授权下尝试定义授权范围、策略和权限,这些都是有意义的。这也没有导致访问令牌上出现更多授权信息。

我尝试的最后一件事是在启用服务帐户的情况下将我的“后端服务”应用程序从“仅承载”更改为“机密”。这也没有什么不同(正如预期的那样)。

Keycloak 版本是 15.1.0(感谢提问,dreamcrash)。

4

0 回答 0