Keycloak资源保护建议

时间:2019-06-14 19:42:14

标签: spring-boot keycloak

我在Spring Boot中编写Web服务,并使用Keycloak保护应用程序。该应用程序将公开API以管理餐厅。

Keycloak 中,我有两个角色: admin manager

具有 admin 角色的用户可以CRUD餐厅。同一家公司有多个餐厅,每个餐厅都有一个经理。 我希望具有管理员角色的用户只能编辑自己的餐馆他们管理的餐馆)。

根据我对Keycloak文档的理解,我必须使用具有 Permission 资源,但他们指出:

  

[]您还可以拥有一个名为Alice's Banking Account的不同资源,该资源代表单个客户拥有的单个资源,并且可以具有自己的一组授权策略。

为此,我必须创建一个类似/api/restaurants/12345的资源,但事实是我无法对这样的ID进行硬编码。

现在,我在春季启动时像这样保护了端点:

http
  .authorizeRequests()
  .mvcMatchers(HttpMethod.PUT, "/api/restaurants/*").hasAnyRole("ADMIN", "MANAGER")
  .anyRequest().permitAll();

这意味着任何餐厅的任何经理都可以编辑另一餐厅。我只想将其限制为他们的餐厅(他们管理的餐厅)。 如何在Keycloak中做到这一点

1 个答案:

答案 0 :(得分:0)

您要寻找的是User managed access (UMA)。它允许管理每个资源的访问权限。

可以使用用户的身份验证来管理权限。因此,如果用户进入新餐厅,您可以自动授予访问权限,而无需涉及特权提升的过程。

最好的介绍可能是Photoz example。而不是餐厅,它是关于相册的。