oauth-2.0 Keycloak -将客户端范围与client_credentials和授权代码流一起使用

7cwmlq89  于 2022-10-31  发布在  其他
关注(0)|答案(2)|浏览(195)

我有一个REST风格的API,它被一个浏览器前端和多个机器对机器客户端使用,所以我通过标准流(授权代码)和服务帐户流(客户端凭据)使用Keycloak 18来发布令牌。
API资源上的操作受read:resourceAupdate:resourceAread:resourceB等作用域的保护。
将领域角色分配给客户端作用域时,如果将用户Map到同一领域角色,则通过授权代码流(浏览器前端)颁发的令牌将包含该作用域。
此外,当我创建机器对机器客户端并将客户端作用域直接添加到客户端时,M2M客户端的令牌也包含该作用域。
到目前为止一切都很好。但一旦我试图同时做这两件事,我就不再有M2M客户端发出的令牌的范围。
似乎将客户端作用域添加到角色会使其无法以其他方式使用该作用域。
一个明显但不好的解决方案是为这种客户端创建第二组作用域。
我正在从www.example.com迁移Auth0.com到Keycloak,而这是目前阻止我完成此迁移的唯一原因。
谢谢帕斯卡

j1dl9f46

j1dl9f461#

在基于标准的方法中,作用域由声明组成。Scopes在设计时是固定的,而claims具有运行时值。因此,在运行时,特定的客户端和用户可能产生以下值:

- myscope
  - roles: [user, admin]
  - subscription-level: gold

一个例子是内置的profile作用域,它包括名称和电子邮件声明,在运行时可能如下所示:

- profile
  - name: John Doe
  - email: john@doe.io

建议避免使用scope explosion,就像你建议的那样。在Keycloak中,我会保持所有客户端的作用域都相同,这样客户端界面就不会发生任何变化。
一个realm role是一种声明,虽然我认为是一个特定于Keycloak的概念。也许你可以用不同的方式来表示它,或者也为M2M客户端配置一个领域角色?

ltqd579y

ltqd579y2#

事实证明,我错过了Service Account Roles的概念。对于所有遇到同样麻烦的人:

如何将新角色添加到授权代码流客户端

  • 创建启用了默认流的客户端
  • 创建客户端角色
  • 在“客户端作用域设置”中,将新的客户端角色添加到作用域
  • 在“客户端设置”中,将作用域添加到默认作用域列表
  • 将新客户端角色添加到用户
    如何添加新的M2M客户端
  • 创建新客户端
  • 在客户端设置中创建新的客户端角色
  • 在客户端设置的选项卡Service Account Roles中,分配新的客户端角色
  • 在客户端范围设置中,分配新的客户端角色
  • 在“客户端设置”中,将作用域添加到默认作用域列表

相关问题