authentication - 使用 keycloak 进行模型授权和权限
问题描述
我还是 Keycloak 的新手,正在尝试为我们的角色和权限模型建模。我们有一个微服务架构,并有以下用例:
一个客户可以有多个账户,每个账户只属于一个客户。例如:
user1@customerA.com has edit access to defaultAccountCustomerA and view access to premiumAccountCustomerA
我将如何建模?
我有不同的选择,我不太确定最佳实践是什么以及如何准确地建模:
选项1
为每个帐户设置范围。然后我会有这样的东西 => scope: customerA:defaultAccount:edit
customerA:premiumAccount:view
。但是我觉得范围的数量很快就会变得无法维护。
选项 2
设置分层组,如下所述:Keycloak 授权:向域对象或实体添加角色
我可以分层定义我的组并通过 JWT 令牌公开组成员身份,这样:user1@customerA.com 是
我还可以更进一步,添加组/customerA/defaultAccount
和. 但是我觉得我在滥用组,我必须在我的服务中手动解析 JWT 令牌。此外,随着帐户数量的增加,组的数量也很大,因为我至少每个帐户都有一个和组。(我应该使用 keycloak admin sdk 并为此以编程方式创建组吗?)/customerA/premiumAccount
/customerA/defaultAccount/edit
/customerA/premiumAccount/view
group_membership
view
edit
选项 3
在 keycloak 中使用权限。我将如何建模?我应该为/customerA/defaultAccount
范围创建一个资源,还是应该为属于一个客户的每个资源view edit
创建一个更细粒度的资源?/customerA/defaultAccount/bills
我将如何管理此用例的权限和策略?
我创建了一个资源/customerA/defaultAccount
,/customerA/premiumAccount
现在我有点不确定如何继续以及如何将 user1@customerA.com 映射到这些帐户 - 我应该为 user1 创建角色,例如 defaultAccountCustomerA_Viewer 并创建/customerA/defaultAccount
角色范围的权限吗?这似乎是加倍努力,但仍然存在与范围相同的基数问题(就像角色一样)
你们能给我一些关于如何建模我的问题以及如何在我的服务中检查/授权这个用例的指示吗?
我想让 user1@customerA.com 调用http://accountservice.com/accounts并且只接收与他相关的帐户,因为其他帐户应该是一个秘密,我很想过滤这些帐户以仅工作他拥有(查看)访问权限的帐户。为此,我需要一个包含此信息的 JWT 令牌
解决方案
推荐阅读
- python - 最小化比尔函数
- google-sheets - 将 ImportData 结果保存在一个单元格中
- php - 带有 eJunkie 的 WooCommerce 自定义支付网关
- laravel-5 - 如何在 Laravel 5.7 中的 Route::group 内的 Routing Route::resource 中设置异常
- html - css对角线随文本旋转
- node.js - 如何在 Node JS 中使用 k6
- sql - 如何在 Oracle 的 WHERE 子句中使用 COUNT
- javascript - 如何在原始文本 JSON 值字符串中转义双引号以以编程方式对其进行解析?
- javascript - React - 有条件地不在表单提交中发送数据键
- shader - DXC 是否对光线跟踪着色器 HLSL 中的条件和对 TraceRay() 的调用施加限制?