首页 > 解决方案 > 使用 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/viewgroup_membershipviewedit

选项 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 令牌

标签: authenticationoauth-2.0authorizationmicroserviceskeycloak

解决方案


推荐阅读