Keycloak keydape:在生成的令牌中包含请求的作用域的角色

Keycloak keydape:在生成的令牌中包含请求的作用域的角色,keycloak,openid-connect,Keycloak,Openid Connect,我目前正在尝试使用keydape作为OICD/OAuth提供者,并计划根据应用程序中的角色使用它进行授权。为此,我需要角色来申请包含在生成的访问令牌中的会话 我的计划如下: 定义已分配角色的作用域 将作用域作为可选作用域添加到KeyClope中的我的应用程序/客户端 使用内置的“角色”作用域(及其映射器)作为客户端的默认值,将有效角色添加到生成的访问令牌中 期望生成的访问令牌中的相关“角色”声明的值等于分配给登录时请求的作用域的角色 到目前为止,除了生成的访问令牌中有趣的“角色”声明包含用户

我目前正在尝试使用keydape作为OICD/OAuth提供者,并计划根据应用程序中的角色使用它进行授权。为此,我需要角色来申请包含在生成的访问令牌中的会话

我的计划如下:

  • 定义已分配角色的作用域
  • 将作用域作为可选作用域添加到KeyClope中的我的应用程序/客户端
  • 使用内置的“角色”作用域(及其映射器)作为客户端的默认值,将有效角色添加到生成的访问令牌中
  • 期望生成的访问令牌中的相关“角色”声明的值等于分配给登录时请求的作用域的角色
到目前为止,除了生成的访问令牌中有趣的“角色”声明包含用户的所有角色,而不仅仅是分配给请求范围的角色之外,这一切都是可能的

所以我的问题是:

  • 在生成的令牌中是否可能有一个“roles”声明,其中只包含可以从请求的作用域解析的角色
示例:

我们有以下范围角色映射:

范围 角色 阅读 读 写 写
是的,你可以。简易方法:

  • Clients Scopes
    菜单部分[
    /auth/admin/master/console/#/realms//client Scopes
    ]中创建所需的作用域。将其命名为:
    read
    (例如)
    您可以关闭同意屏幕上的选项
    显示
    &
    包括在令牌范围内
    。我们不需要它

  • 保存范围后,转到
    映射器
    选项卡(范围的
    读取

    • CREATE
      按钮
    • 映射器类型=
      硬编码角色
      ;Name=
      r_read
      ;角色=
      r\u读取
    • 救命
  • 将作用域(
    read
    )添加到主客户端[
    /auth/admin/master/console/#/realms//clients//Client Scopes/setup Scopes
    ]
  • 现在请求具有作用域(
    read
    )的访问令牌
  • 瞧!现在,您的访问令牌的
    realm\u access.roles
    部分将如下所示:
  • “领域访问”:{
    “角色”:[
    “离线访问”,
    “uma_授权”,
    “读”
    ]
    }
    
    非常感谢您的详细回答!我看到的问题是,每个作用域至少需要两个角色:一个角色允许应用该作用域,另一个角色在应用该作用域时添加到令牌。我担心这会使配置更难管理,因为“冗余”配置以及用户和角色之间的不透明连接。一个可能有助于理解我的观点的示例:
    ([user with role“r_read”]可能适用)->([scope“read”]添加)->([role“r_read_effective”],[role other_role],…与用户没有连接)
    …最后但并非最不重要的是,生成的令牌仍然包含分配给用户的所有角色。