Keycloak授权:向域对象或实体添加角色

2023-12-26

我是 Keycloak 框架的新手,在痛苦地编写了自己的解决方案之后,我们希望转换为 KeyCloak。这似乎是一个很有前途的解决方案,但不幸的是缺乏自我描述文档。我已经阅读了教程和术语,但是,我似乎无法通过 Keycloak 概念为我的授权用例塑造合适的模型。我发布了我的问题 https://lists.jboss.org/pipermail/keycloak-user/2019-July/018714.html!在 Keycloak 邮件列表中没有任何回复,所以我决定联系这里。

请考虑这个使用场景:

  • 您为汽车经销商提供 SaaS 解决方案。
  • 每个经销商在创建时都会继承一组默认角色,例如管理员、经理、销售、会计师……)
  • 经销商可以添加/删除默认角色的权限。
  • 经销商可以定义自己的自定义角色。
  • 经销商有多个供应商,每个供应商都有几个角色(管理员、会计师、供应商)
  • 经销商有许多部门,每个部门可能有自己的角色。
  • 基本上,您在不同的环境中扮演不同的角色。

在我的内置模型中,我有一个将角色连接到主体(实体)的表,并将 ACL(或权限)分配给角色。委托人可以是“DealershipA”、“DealershipB”、“Vendor1”、“Department0”中的任何一个。

现在我的问题是:在 Keycloak 中实现此场景的最佳实践是什么。

  • 您将如何向实体添加/分配角色?
  • 您会将经销商、供应商或部门视为资源吗?

预先感谢您的所有帮助,


IIUC 这种场景可以通过不同的方法来实现,具体取决于您想要执行的 KeyCloak 集成级别。让我尝试以这样一种方式来阐述。这很可能不是最理想的,但是您可以使用它作为起点。

首先,经销商可以被视为租户分隔符,因此单个经销商中的用户可以聚集到 KeyCloak 领域1 https://i.stack.imgur.com/idyQ2.png。领域将用户分组在一起,听起来经销商就是这样的分隔符(如果确实允许用户通过相同的用户配置文件访问不同的经销商,则无法应用这种分隔)。

关于角色,在一种方法中,每个经销商、供应商、部门角色(管理员、销售、帐户等)都可以是一个领域角色2 https://i.stack.imgur.com/eN9DL.png。这些是特定经销商中的用户可用的角色。然而,我想不出 KeyCloak 本地方式来区分经销商角色、供应商角色和部门角色。这些可以通过命名标准来区分(例如:vendor-admin)?

在另一种方法中,每个实体(经销商、供应商、部门)也可以是一个具有自己的属性和角色的组 [3]。一个优点可能是实体之间的关系可以在组-子组关系中复制。样本组层次结构 https://i.stack.imgur.com/idyQ2.png 部门组属性 https://i.stack.imgur.com/eN9DL.png

这可以让您开始对 KeyCloak 内的实体进行建模。

在授权中,您似乎将能够使用 KeyCloak [4] 中提供的授权服务。我个人没有使用过此功能,但如果您想依赖 KeyCloak 作为 PAP、PDP 和 PEP [5],这看起来是正确的选择。

例如,可以授予或拒绝用户对特定供应商或部门的资源的访问权限,因为用户信息包含用户的组关系。这似乎可以通过基于组的策略来实现[6]。

为了更直接地回答问题,

  1. 用户创建过程应确保进行正确的角色和(或)组关联

  2. 资源似乎是每种实体类型提供的服务(例如:add_vendor(), view_accounts())

希望这有助于让设计顺利进行。由于目前大多数细节尚不清楚,因此必须根据未来的需求重做设计,但至少有一个模型来验证您将能够做得更好。

1 https://i.stack.imgur.com/idyQ2.png - https://www.keycloak.org/docs/6.0/server_admin/#core-concepts-and-terms#realms https://www.keycloak.org/docs/6.0/server_admin/#core-concepts-and-terms#realms

2 https://i.stack.imgur.com/eN9DL.png - https://www.keycloak.org/docs/6.0/server_admin/#realm-roles https://www.keycloak.org/docs/6.0/server_admin/#realm-roles

[3] - https://www.keycloak.org/docs/6.0/server_admin/#groups https://www.keycloak.org/docs/6.0/server_admin/#groups

[4] - https://www.keycloak.org/docs/5.0/authorization_services/ https://www.keycloak.org/docs/5.0/authorization_services/

[5] - https://www.keycloak.org/docs/5.0/authorization_services/#_overview_architecture https://www.keycloak.org/docs/5.0/authorization_services/#_overview_architecture

[6] - https://www.keycloak.org/docs/5.0/authorization_services/#_policy_group https://www.keycloak.org/docs/5.0/authorization_services/#_policy_group

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keycloak授权:向域对象或实体添加角色 的相关文章

随机推荐

  • 如何递归连接字符串元素列表

    我正在查看准备考试的示例 坦率地说 我不太擅长递归或列表 尤其是列表 给定一个节点类 它将保存字符串 不是通用的 编写一个名为 concat 的递归 java 函数 该函数采用表示链表头的节点 并返回表示链表中所有元素的串联的字符串 如果链
  • 对列表进行子集化 - plyr 方式?

    我经常拥有按一个或多个变量分组的数据 每组内有多个注册 从数据框中 我希望根据各种标准选择组 我通常使用 split sapply rbind 方法 其中使用逻辑向量从列表中提取元素 这是一个小例子 我从一个包含一个分组变量 组 的数据框开
  • 如何在 Jenkins (VS2012) 中运行发布/点击一次构建步骤

    我们有一个简单的 C 解决方案 VS 2012 它有一个发布步骤 单击一次向导 使用 ftp 我已经设置了一个 jenkins 构建项目来在 SVN 触发器上构建它 通过 MSBuild 我无法让它构建 通过 MSBuild 发布 单击一次
  • WPF 嵌套 Scrollviewers - 将控制权交还给父级 scollviewer

    这就是我的控制树的样子
  • Android P 预览上的 toast View 的 IllegalStateException

    在尝试发布我的应用程序进行生产时 预发布报告通知我 Pixel 2 Android P Preview 设备上出现错误 该错误与我的自定义 toast 消息有关 该消息表示视图 已添加到窗口管理器 java lang IllegalStat
  • 不用sudo重启nginx?

    所以我希望能够在不输入任何密码的情况下进行 cap deploy 我已经设置了所有私钥 这样我就可以很好地访问远程服务器 并且现在使用 svn over ssh 所以那里没有密码 我还有最后一个问题 我需要能够重新启动 nginx 现在我有
  • 导入 javax.validation.constraints.NotEmpty;不工作[重复]

    这个问题在这里已经有答案了 我目前有一个 java spring boot 应用程序 我将版本 在代码中 从 2 1 4 更改为 2 3 0 但结果我遇到了错误error package javax validation constrain
  • android服务导出属性?

    我对android平台还很陌生 我想导出我的服务以供公众使用 我在开发人员文档中找到了一些内容 android exported其他应用程序的组件是否可以调用该服务或与其交互 如果可以 则为 true 如果不能 则为 false 当值为 f
  • 为闪亮仪表板中的滑块添加不同的静态颜色

    我是闪亮的新手 我想为滑块提供静态颜色 无论闪亮仪表板中选择的范围如何 我想要滑块有不同的颜色 如下所示 例如 0 到 40 红色 40 到 60 蓝色 60 到 100 绿色 请帮我解决这个问题 我的代码 library shiny li
  • 为什么更喜欢模板方法而不是依赖注入?

    我一直在阅读 Gamma 等人写的 设计模式 我有一个关于模板方法与依赖注入相比的问题 使用模板方法 您可以使用为所需操作或计算提供替代方案的策略来 模板化 类 因此 您不需要从多种替代方案中选择一种策略并将该策略编码到类中 而是允许类的用
  • 使用 Launch4j VM 参数路径包装的 JavaFX 项目

    对于我的一些项目 我使用 JavaFX 作为 GUI 在 JavaFX 被拆分为 OpenJFX 之前 我没有遇到任何问题 现在我想使用最新版本的 JDK 和 JavaFX 因此必须进行一些更改 在 Eclipse 中工作时 一切都按预期运
  • 使用 main() 函数进行递归[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在编写一个程序来使用递归计算阶乘
  • 将图像上传到 codeigniter 中的 MySQL 数据库 blob

    我想将图像上传到mysql数据库以存储许多信息 我已附上 3 MVC 代码供您参考 请帮助我 ref http forum codeigniter com thread 1205 html http forum codeigniter co
  • 子进程返回码中的Python“return not”语句

    我刚刚在Python中遇到了一行非常奇怪的代码 self myReturnCode externalProcessPopen returncode return not self myReturnCode 究竟是什么return not代表
  • 当有新更新可用时,Angular 4 PWA Service Worker 不会更新

    在我更新 Angular 4 PWA 应用程序并部署后 用户无法获得新的更新 直到用户清除缓存并刷新浏览器 Sw不更新 即使我按下 crome Dev 中的更新按钮 它也不会更新 我必须清除缓存并刷新浏览器 我用过这些包 Angular s
  • Discord 机器人:修复“找不到 FFMPEG”

    我想让我的 Discord 机器人加入语音聊天 但每次我这样做时 我都会在 log cmd 中收到错误消息 FFMPEG not found 请帮我 错误图片 这是代码 client on message message gt Voice
  • pymysql无法连接mysql

    我正在尝试使用 pymsql 连接到 MySQL 数据库 主机是 115 28 236 225 并使用默认端口 3306 代码如下 db connect py import pymysql def connDB conn pymysql c
  • jQuery悬停不适用于动态元素

    我从数据库中获取数据 并根据匹配的数量 我想输出 div img src images account related icons link delete png div 我希望该图像在悬停时发生变化 所以我使用以下代码 link dele
  • 空终止字符串的基本原理是什么?

    尽管我非常喜欢 C 和 C 但我还是忍不住对空终止字符串的选择感到摸不着头脑 长度前缀 即 Pascal 字符串在 C 之前就已存在 长度前缀字符串通过允许恒定时间长度查找使多种算法更快 带长度前缀的字符串更难以导致缓冲区溢出错误 即使在
  • Keycloak授权:向域对象或实体添加角色

    我是 Keycloak 框架的新手 在痛苦地编写了自己的解决方案之后 我们希望转换为 KeyCloak 这似乎是一个很有前途的解决方案 但不幸的是缺乏自我描述文档 我已经阅读了教程和术语 但是 我似乎无法通过 Keycloak 概念为我的授