【问题标题】:Keycloak - how to get service account roles in client credentials access tokenKeycloak - 如何在客户端凭据访问令牌中获取服务帐户角色
【发布时间】:2022-10-17 23:23:19
【问题描述】:

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

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

  • 已创建领域测试
  • 在领域 (realm-clientscope1) 上添加了客户端范围
  • 在领域中添加了角色 (realm-role1, realm-role2)
  • 定义客户端“后端服务”,使其成为“仅承载”客户端,因为它不必授权自己使用其他服务
  • 在此客户端上创建角色(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)。

【问题讨论】:

  • 您使用的是哪个 KC 版本?
  • 钥匙斗篷 15.1.0
  • 您是否尝试在客户端选项卡“服务帐户角色”下分配角色?
  • 是的,我为尝试与后端服务 API 对话的后端应用程序执行了此操作。

标签: oauth-2.0 authorization keycloak clientcredential


【解决方案1】:

有点晚了,但我希望它可以对遇到同样问题的人有所帮助。

基本上,有必要去客户端范围选项卡,然后添加角色到默认范围。 请注意,必须在两者中设置所需的角色范围服务帐号角色选项卡或可以设置允许全范围范围选项卡,然后只需在服务帐号角色标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 2018-03-25
    • 2021-09-01
    • 2020-10-02
    • 2015-04-29
    • 1970-01-01
    • 2022-07-14
    • 2021-07-20
    相关资源
    最近更新 更多