gpt4 book ai didi

Keycloak:在生成的 token 中包含请求范围的角色

转载 作者:行者123 更新时间:2023-12-03 08:28:45 27 4
gpt4 key购买 nike

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

我的计划如下:

  • 定义已分配角色的范围
  • 将范围作为可选范围添加到 Keycloak 中的应用程序/客户端
  • 使用内置“角色”范围(及其映射器)将有效角色添加到生成的访问 token 中作为客户端的默认设置
  • 预计生成的访问 token 中相关“角色”声明的值等于分配给登录时请求的范围的角色

到目前为止,这一切都是可能的,除了生成的访问 token 中有趣的“角色”声明包含用户的所有角色,而不仅仅是分配给请求范围的角色。

所以我的问题是:

  • 是否可以在生成的 token 中包含仅包含可从请求的范围解析的角色的“角色”声明?

示例:

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

<表类=“s-表”><标题>范围角色 <正文>阅读r_read写r_write

以及具有“r_read”和“r_write”角色的用户。

当用户使用请求的“read”范围登录时,我希望生成的访问 token 中的“roles”数组仅包含“r_read”角色。相反,它目前还包含“r_write”角色。

更新:

经过更多挖掘后,我认为我被“客户端范围”详细配置中的“范围”选项卡的文档误导了(或误解了它):

Scope mappings allow you to restrict which user role mappings are included within the access token requested by the client.

那里设置的分配角色仅控制需要哪个角色,以便可以将范围应用/添加到 scope声明访问 token 。

我目前看到的可能性是:

  • 尝试将角色与范围进行 1:1 映射,并使用应用的范围进行授权(看看这是否可行)
  • 尝试编写我自己的映射器,将作用域解析为角色(看看是否可以通过使用公共(public) API 并且在不影响性能的情况下实现这一点)
  • 放弃“登录时请求的权限”的想法,只查看用户角色
    • 并接受这一点 - 例如- 管理员无法使用用户权限登录

最佳答案

是的,可以。简单的方法:

  1. Clients Scopes中创建所需的范围菜单部分[ /auth/admin/master/console/#/realms/<your realm>/client-scopes ] 将其命名为:read (例如)
    您可以关闭选项Display On Consent Screen & Include In Token Scope 。我们不需要它

  2. 保存范围后,转到 MAPPER选项卡(范围 read )

  • CREATE按钮
  • 映射器类型 = Hardcoded Role ;姓名 = r_read ;角色= r_read
  • 保存!
  • 将范围 ( read ) 添加到 Optional Client Scopes您的主要客户[ /auth/admin/master/console/#/realms/<your realm>/clients/<your client UUID>/client-scopes/setup-scopes ]
  • 现在请求范围为 ( read ) 的访问 token
  • 瞧!现在realm_access.roles您的访问 token 的部分将如下所示:
  •   "realm_access": {
    "roles": [
    "offline_access",
    "uma_authorization",
    "r_read"
    ]
    }

    关于Keycloak:在生成的 token 中包含请求范围的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65782574/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com