如何在Keycloak中实现属性级别的访问控制

时间:2019-11-20 18:44:01

标签: authorization openid-connect keycloak acl access-control

我需要能够限制资源对象上各个属性的突变。

例如:允许John更新Foo.bar和Foo.baz,但只允许Jane更新Foo.bar

在Keycloak中有什么方法可以做到这一点吗?也许有一个JavaScript策略执行器会根据一系列细粒度的范围(foo:bar:update,foo:baz:update)或类似内容检查PUT的有效负载?

2 个答案:

答案 0 :(得分:1)

不确定您的用例,您可以使用AuthorizationContext.hasResourcePermission("Foo.bar").来检查Keycloak为经过身份验证的用户授予的权限

您可以检查身份验证quickstarts来了解如何获取AuthorizationContext

https://github.com/keycloak/keycloak-quickstarts/blob/master/app-authz-springboot/src/main/java/org/keycloak/quickstart/springboot/security/Identity.java

答案 1 :(得分:-3)

在体系结构PoV中,策略执行-授权-本身应由 API网关执行。网关会将传入的请求与一组预定义的策略进行比较,然后对请求进行授权。

在Keycloak中,您可以组合使用 Groups Roles 。组可以具有定义的角色,该角色将应用于组的所有成员。因此,您创建的用户是多个组的成员,从而导致具有多个角色。一个不错的好处是能够根据用户的组成员身份列出用户。

PS:就我个人而言,我没有使用 Scopes 的经验,但是它们也应该起作用。


示例:

您将创建具有角色Bar的组BAR和具有角色Baz的{​​{1}}。然后,您将用户John既分配给BAZBar,又将Jane分配给Baz。在API网关上,您根据Bar标头传入​​的角色数组检查PUT请求的属性。