我使用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方法和范围之间的关联。
你会如何构建
从概念上讲,我必须区分单个资源和列表资源:
/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服务器管理。
希望这有助于其他人!
以下是强制执行基于范围的权限的配置 -
keycloak.policy-enforcer-config.paths [1] .path = / api / resourcea keycloak.policy-enforcer-config.paths [1] .scopes = profile:view,album:delete