spring-boot - Spring Boot 2 和 Keycloak 授权:实现一个简单的 REST API
问题描述
我使用 Spring Boot 2 和 Keycloak (keycloak-spring-boot-starter) 来实现 REST API。但是,我就是做错了。
我的 API 资源如下所示:
POST /api/a 创建一个,如果授予 a:write
GET /api/a 读取所有授予 a:read
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 方法和范围之间的相关性。
你将如何构建
- 您的 Keycloak 服务器(即客户端配置:资源(包括 URI)、范围、策略、权限;以及:组、角色)?
- 您的 Spring Boot 2 application.properties(与 Keycloak Authz 一起使用)?
- 以下陈述是否正确:如果我的 API 设置正确(将路径和方法映射到范围),我可以通过 Keycloak 用户、组、角色、策略和权限完全控制对我的资源的访问。
- policy-enforcer-config 可以混合使用吗?意味着一部分来自 application.properties,另一部分来自 Keycloak 服务器?它会合并所有可能的路径吗?路径将如何解决?
解决方案
从概念上讲,我必须区分单一资源和列表资源:
/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 服务器之间的混合策略执行器配置工作:端点映射到 application.properties 中的范围,具体资源路径由 Keycloak 服务器管理。
希望这对其他人有帮助!
推荐阅读
- c# - 无法嵌入互操作类型“ProjectKinds”。改用适用的接口
- java - 在 searchview 中使用空格键过滤列表视图
- node.js - 节点生成进程比主节点进程寿命长
- android - GPS_PROVIDER 的位置
- c# - 在控制台中处理标准输出与重定向时不同
- asyncdisplaykit - ASViewController
显示空表 - google-cloud-platform - 保持 Datalab 运行
- .net - Microsoft.Azure.Management.DataLake.Store 与 Microsoft.Azure.DataLake.Store
- c++ - 'juce::WildcardFileFilter' 的初始化没有匹配的构造函数
- android - Cordova 8,Android 7.1.0,无法安装任何插件