Spring Boot 2和Keycloak授权:实现一个简单的REST API

问题描述 投票:0回答:2

我使用Spring Boot 2和Keycloak(keycloak-spring-boot-starter)来实现REST API。但是,我无法做对。

我的API资源如下所示:

POST / api / a创建一个,如果授予a:write

GET / api / a读取所有授予的:读取

GET / api / a / {name}读取单个a(如果授予a:read)

POST / api / a / {name} / b在a下创建b,如果授予b:write等等...

每个API资源也应该在Keycloak中获得ResourceRepresentation,因为要求是为每个资源提供对用户的读访问权限。我打算为此使用组,并将用户分配给与资源名称匹配的组。 (例如,资源名称将是/ a1 / b1,它也将是我为其分配读取权限的用户的组)

写入权限仅授予管理员,管理员将在相应的角色分配的组中。

我整个星期都在努力,没有成功。我的API实现和Keycloak配置看起来都像战场。 github上的示例过于简单,因为它没有显示嵌套资源以及HTTP方法和范围之间的关联。

你会如何构建

  1. 您的Keycloak服务器(即客户端配置:资源(包括URI),范围,策略,权限;以及:组,角色)?
  2. 你的Spring Boot 2 application.properties(与Keycloak Authz合作)?
  3. 以下陈述是否正确:如果我将API设置正确(将路径和方法映射到范围),我可以通过Keycloak用户,组,角色,策略和权限完全控制对我的资源的访问。
  4. policy-enforcer-config可以混合使用吗?这意味着来自application.properties的一部分,另一部分来自Keycloak服务器?它会合并所有可能的路径吗?如何解决路径?
spring-boot authorization keycloak
2个回答
0
投票

从概念上讲,我必须区分单个资源和列表资源:

/buildings/building-1              associated with scopes building:read, building:write, roomS:read, roomS:write
/buildings/building-1/rooms        requires the roomS:read or roomS:write respectively
/buildings/building-1/rooms/room-1 associated with scopes room:read, room:write

请注意/rooms资源范围内的复数形式。

此外,application.properties和Keycloak服务器之间的混合policy-enforcer-config工作:端点映射到application.properties中的范围,具体资源路径由Keycloak服务器管理。

希望这有助于其他人!


0
投票

以下是强制执行基于范围的权限的配置 -

keycloak.policy-enforcer-config.paths [1] .path = / api / resourcea keycloak.policy-enforcer-config.paths [1] .scopes = profile:view,album:delete

© www.soinside.com 2019 - 2024. All rights reserved.