如何将 keycloak 角色引入我的 Spring boot 应用程序?
设置项目后,登录和注销工作正常,但keycloak中定义的角色在spring boot应用程序内部不可用
我已经尝试了keycloak内的各种配置。我可以实现角色在 Spring 安全认证中的 Realm_access 下可用,但只是作为一个属性。
我希望 Spring 将这些映射到权限,所以我们可以使用 hasRole 等。
我是否需要更改 spring 或 keycloak 内部的配置才能实现此映射,还是我真的需要手动映射这些?
设置本身非常简单。
这是属性文件:
spring.security.oauth2.client.registration.spring-client.client-id=spring-client
spring.security.oauth2.client.registration.spring-client.client-secret=secret
spring.security.oauth2.client.registration.spring-client.scope=openid, profile, roles
spring.security.oauth2.client.registration.spring-client.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.spring-client.redirect-uri=http://localhost:8080/login/oauth2/code/spring-client
spring.security.oauth2.client.provider.spring-client.issuer-uri=http://127.0.0.1:28080/realms/spring-client
配置:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeHttpRequests()
.anyRequest().authenticated()
.and()
.oauth2Login()
.and()
.logout().logoutSuccessHandler(oidcLogoutSuccessHandler());
return http.build();
}
RTFM。对于 OAuth2 客户端(您的情况)、对于 OAuth2 资源服务器使用 JWT 解码器以及对于资源服务器使用令牌内省,角色映射的完成方式有所不同,但 Spring Security 文档中对此进行了详细解释。
如果您更喜欢从应用程序属性定义权限映射而不是编写 Java 代码,您可以查看 my starter (它也将简化应用程序配置的其他方面)。