keycloak - 为每个租户/帐户的用户提供不同的权限
keycloak - give users different permissions per tenant / account
我们将 Keycloak 用于 SaaS 产品。每个用户都是租户/帐户的一部分,并且具有访问此帐户数据的特定角色。角色在Keycloak中配置,相关账户保存为用户的用户属性。
现在我们有一项新要求,即允许用户访问多个帐户。对于这些帐户中的每一个,用户可能具有不同的角色:
User A:
- Account A:
- ADMIN
- Account B:
- Reader
User B
- Account B:
- Reader
...
我找到了很多关于多租户的不同方法的文章,但没有找到这方面的文章。大多数文章结合了角色和群体。但就我而言,我需要为每个帐户创建一个新组。所以我最终会得到成千上万个组。
现在我的 API 可以根据发布的 JWT 授权请求。理想情况下我可以保留这个。
实现此结构(用户可以访问具有不同角色的多个帐户)的最佳方式是什么?
这真的可以用 keycloak 实现吗?
还是我想错了方向?
这听起来像是一个相当常见的用例。
已经非常感谢了。
The roles are configured in Keycloak and the related account is saved as > a user attribute on the user.
我不确定您为什么需要这个,因为您可以根据用户角色进行推断。
Now we've got a new requirement to give users access to multiple
accounts. And for each of these accounts the user might have different
roles:
如果我完全理解你的问题,我认为它可以通过客户端级别的角色来解决。例如:
转到:
- 你的领域;
- 客户;
- 账户A;
- 角色;
- 添加角色;
- 设置角色并保存
要为用户设置角色,请转到
- 你的领域;
- 用户;
- 点击用户;
- 角色映射;
- 从客户角色下拉列表中 select 客户(例如, 账户 A)
- 添加角色;
Right now my APIs can authorize requests based on the issued JWT.
Ideally I can keep this.
代表 user a
向 Account A
请求令牌的方式如下:
"acr": "1",
"realm_access": {
"roles": [
"offline_access",
"uma_authorization"
]
},
"resource_access": {
"AccountA": {
"roles": [
"ADMIN"
]
},
"AccountB": {
"roles": [
"Reader"
]
},
"account": {
"roles": [
"manage-account",
"view-profile"
]
}
},
有人可能会说,当从客户端 Account A
请求令牌时,并不真正关心客户端 Account B
中的角色。这可以通过使用 Keycloak 的范围功能来解决。使用此功能,可以 select 来自与当前客户端相关的其他客户端的角色。默认情况下,包括所有角色。尽管如此,要过滤需要去的角色:
- 你的领域;
- 客户;
- 本例中的客户帐户 A;
- 范围;
- 切换到
OFF
选项Full Scope Allowed
;
- 保存。
令牌现在的样子:
"resource_access": {
"AccountA": {
"roles": [
"ADMIN"
]
}
},
我们将 Keycloak 用于 SaaS 产品。每个用户都是租户/帐户的一部分,并且具有访问此帐户数据的特定角色。角色在Keycloak中配置,相关账户保存为用户的用户属性。
现在我们有一项新要求,即允许用户访问多个帐户。对于这些帐户中的每一个,用户可能具有不同的角色:
User A:
- Account A:
- ADMIN
- Account B:
- Reader
User B
- Account B:
- Reader
...
我找到了很多关于多租户的不同方法的文章,但没有找到这方面的文章。大多数文章结合了角色和群体。但就我而言,我需要为每个帐户创建一个新组。所以我最终会得到成千上万个组。
现在我的 API 可以根据发布的 JWT 授权请求。理想情况下我可以保留这个。
实现此结构(用户可以访问具有不同角色的多个帐户)的最佳方式是什么? 这真的可以用 keycloak 实现吗?
还是我想错了方向? 这听起来像是一个相当常见的用例。
已经非常感谢了。
The roles are configured in Keycloak and the related account is saved as > a user attribute on the user.
我不确定您为什么需要这个,因为您可以根据用户角色进行推断。
Now we've got a new requirement to give users access to multiple accounts. And for each of these accounts the user might have different roles:
如果我完全理解你的问题,我认为它可以通过客户端级别的角色来解决。例如:
转到:
- 你的领域;
- 客户;
- 账户A;
- 角色;
- 添加角色;
- 设置角色并保存
要为用户设置角色,请转到
- 你的领域;
- 用户;
- 点击用户;
- 角色映射;
- 从客户角色下拉列表中 select 客户(例如, 账户 A)
- 添加角色;
Right now my APIs can authorize requests based on the issued JWT. Ideally I can keep this.
代表 user a
向 Account A
请求令牌的方式如下:
"acr": "1",
"realm_access": {
"roles": [
"offline_access",
"uma_authorization"
]
},
"resource_access": {
"AccountA": {
"roles": [
"ADMIN"
]
},
"AccountB": {
"roles": [
"Reader"
]
},
"account": {
"roles": [
"manage-account",
"view-profile"
]
}
},
有人可能会说,当从客户端 Account A
请求令牌时,并不真正关心客户端 Account B
中的角色。这可以通过使用 Keycloak 的范围功能来解决。使用此功能,可以 select 来自与当前客户端相关的其他客户端的角色。默认情况下,包括所有角色。尽管如此,要过滤需要去的角色:
- 你的领域;
- 客户;
- 本例中的客户帐户 A;
- 范围;
- 切换到
OFF
选项Full Scope Allowed
; - 保存。
令牌现在的样子:
"resource_access": {
"AccountA": {
"roles": [
"ADMIN"
]
}
},