【发布时间】:2021-07-25 21:42:43
【问题描述】:
我们公司的用户存储在 ldap(oracle 互联网目录)中。用户具有某些组,例如管理员、用户等 我需要将这些组映射到我的客户端应用程序角色。客户端应用程序是使用 keycloak-spring-security-adapter (pom) 测试 Spring Boot 应用程序。
我在 Keycloak 管理控制台中所做的步骤:
- 在用户联盟菜单中使用 ldap 创建用户联盟(不导入)。检查是否可以在用户菜单中找到 ldap 用户。
- 添加 group-ldap-mapper https://prnt.sc/12fb6b8 检查 ldap 组在组菜单中是否可见。用户也有正确的组成员身份:https://prnt.sc/12fb9xr
- 在客户端中为我的应用程序创建客户端。
- 在客户端创建两个角色 - ADMIN 和 USER:https://prnt.sc/12fbbut
- 在组 - 管理员(ldap 组) - 角色映射中添加 ADMIN 客户端角色:http://prntscr.com/12fbhbq 对 USER 执行相同操作。现在我在用户菜单中的用户具有正确的有效角色,包括 ADMIN 和 USER:https://prnt.sc/12fc7j2
使用 KeycloakWebSecurityConfigurerAdapter 创建简单的 Spring Boot 应用程序:https://pastebin.com/HsHuNn55 和application.yml:https://pastebin.com/JPFmwKyS
现在我在浏览器中访问我的客户端应用程序并被重定向到 keycloak,在那里我使用我的 ldap 用户密码进行身份验证。
我希望经过身份验证的用户在应用程序中具有 ADMIN 角色。但实际上它只有标准的 keycloak 角色,而不是我在客户端创建的自定义角色:https://prnt.sc/12fc3fx 带有 @PreAuthorize("hasRole('ADMIN')") 的控制器方法以 403 响应。
我错过了什么?
谢谢。 Keycloak 12.0.3、Spring Boot 2.4.2
更新:
我已经在我的客户端应用程序之外(使用 http 客户端)向 keycloak auth 端点发出了 http 请求,并且在收到的访问令牌中,我确实在 resource_access 部分看到了我的自定义 ADMIN 和 USER 角色:
"realm_access": {
"roles": [
"offline_access",
"uma_authorization"
]
},
"resource_access": {
"adapter-client-test": {
"roles": [
"ADMIN",
"USER"
]
},
所以我相信 keycloak 本身配置正确,但是 spring boot 客户端应用程序有问题?
【问题讨论】:
-
尝试在您的客户端下添加“用户客户端角色”类型的映射器。以下回答了类似的问题stackoverflow.com/questions/62354754/…
标签: spring-boot keycloak