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授权:向域对象或实体添加角色 的相关文章

  • Spring OAuth2 Keycloak Kubernetes 内部/外部访问

    我在 Kubernetes 集群内配置了 Keycloak 10 0 3 服务器 keycloak 服务器必须处理外部用户的身份验证 使用外部 url 并处理用于 Spring 微服务通信的 oauth2 令牌 然后Web应用程序Sprin
  • Rails 3 公司帐户具有许多用户,限制对数据的访问

    我想知道在我的应用程序中构建身份验证 授权的最佳方法 我希望有 许多公司帐户 可能使用子域 帐户有很多用户 用户只能访问自己或具有相同帐户的其他用户创建的记录 我所做的研究提供了许多混合搭配的想法 以奇怪而美妙的方式组合 devise ca
  • 将策略应用到资源控制器

    我有一个CRUD资源定义通过Route resource User UserController 既然可以生成CRUDGates and Policies 有没有办法应用这样的Gate Policy 以便将相应的Gate Policy应用于
  • iPhone 应用程序在首次 Facebook Connect 授权/登录后崩溃

    我一直在到处寻找答案 但找不到 问题是 我有一个 iPhone 应用程序 在 AppStore 上 它使用脸书 iPhone SDK https github com facebook facebook iphone sdk 我使用 SDK
  • 为 NFL api 生成访问令牌

    NFL 有一个 API 服务 link https api nfl com docs getting started index html https api nfl com docs getting started index html
  • 将 access_token 存储在用户声明中以进行授权是否安全?

    因此 我在设置 IdentityServer4 时遇到了承载身份验证问题 基本上 我无法调用我的 API 资源并收到 401 错误 当我使用 access token 添加授权标头时 我能够从我的网络请求中获取数据 using var cl
  • 优雅地退出 Laravel 作用域

    我有一个范围 它根据用户角色以限制方式起作用 您可以将一组规则转发到限制数据库最终输出的范围 一个非常简化的角色限制示例 first name foo 只会返回其记录first name开始于foo 这实际上意味着我已禁止具有该角色的用户查
  • 如何在Keycloak资源中添加HTTP方法进行授权(无适配器)

    当使用 Keycloak 进行授权时 它允许创建受保护的资源 但它只允许定义 URI 我怎样才能添加资源的 HTTP 方法 虽然看起来政策执行者 https www keycloak org docs latest authorizatio
  • Keycloak - 代理后面的 URL 重置密码电子邮件

    我们正在使用钥匙斗篷 2 0 0 Final安装在后面Nginx 代理在 RedHat 环境上 我们目前面临的问题是重设密码使用内部服务器主机而不是操作 URL 中的外部服务器发送电子邮件的功能 因为我们位于代理后面 我通过电子邮件收到此信
  • 如何通过 URL 传递 keycloak 登录页面语言

    是否可以通过登录 URL 传递语言 我现在知道 Keycloak 支持多种语言 启用此功能后我可以使用它 目前 我只能在进入登录页面后更改该语言 我想用给定的语言显示登录页面 有没有办法使用查询参数或标头值通过登录页面 URL 传递语言 加
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • Keycloak Export 只接受 H2 datase-URL (数据源:URL 格式错误;必须是 jdbc:h2 ...但是是 jdbc:mariadb: ...)

    钥匙斗篷版本 20 0 1 码头工人版本 20 10 12 Docker Compose 版本 2 2 2 GitHub 问题 https github com keycloak keycloak issues 15898 https gi
  • ASP.NET MVC:从变量设置授权属性角色时出现问题,需要 const

    我在从变量设置授权属性角色值时遇到问题 错误消息表明它需要一个 const 变量 当我创建 const 类型变量时 它工作正常 但我试图从 Web Config 文件或其他允许最终用户设置它的文件中加载值 我正在使用集成 Windows 身
  • KeyCloak 服务器的自省端点

    我正在尝试探索 KeyCloak 服务器的功能 并希望通过使用获取有关访问令牌的信息 openid connect token introspect端点 因此 我将向此端点发送下一个请求 curl v data token type hin
  • 子文件夹中忽略 ASP.NET web.config 授权设置

    我正在使用 asp net mvc 2 和 vs 2008 我正在尝试制作具有表单授权的网站 当我尝试限制对某些页面的访问时 我正在使用 asp net 管理工具 例如 我创建规则来拒绝匿名用户访问整个网站 正如预期的那样 管理工具在根 w
  • 在 ASP.NET MVC 中自定义授权

    我的 Controller 类用 AuthorizeAttribute 装饰以保护操作 Authorize Roles User Level 2 public class BuyController Controller 每当调用操作 但用
  • 在 keycloak 令牌中使用“sub”声明作为内部数据库中的用户 ID 是否安全

    我正在开发一个将来可能支持社交登录的应用程序 除了我们自己的 keycloak 用户名 电子邮件注册之外 我正在尝试确定使用 keycloak ID 令牌中的 sub 声明作为我们内部 mongo 数据库中用户的主键 id 字段 是否安全
  • ASP.Net MVC 4 通用主要难点

    我正在开发一个ASP NET MVC 4Web应用程序 以前我的 MVC 应用程序是使用MVC 3和这个新的MVC 4我刚刚复制 重复使用了我的应用程序认证和授权码从以前的应用程序 当用户登录我的网站时 我会执行以下操作 账户控制器 pub
  • JSF中直接更改URL来限制用户访问页面

    我的应用程序中有两种用户 客户和卖家 我正在使用一个PhaseListener在JSF中防止用户在未登录的情况下访问页面 但在登录后我不知道如何防止用户更改地址栏中的URL并访问他也不允许的页面 例如 阻止客户访问卖家页面 有谁知道我如何防
  • 使用 Apache HTTPd 模块的 OAuth 2.0 身份验证

    是否可以使用 Apache HTTPd 服务器模块来实现 OAuth 2 0 或 1 0 我选择这条路线是因为每个请求都会首先到达 HTTPd 模块 因此我必须从那里进行身份验证 如果可能的话 请分享相关链接 我要补充一下尤金尼奥的答案mo

随机推荐

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

    我正在查看准备考试的示例 坦率地说 我不太擅长递归或列表 尤其是列表 给定一个节点类 它将保存字符串 不是通用的 编写一个名为 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 概念为我的授