如何将keycloak角色引入Sping Boot 应用程序?
在设置项目之后,login和logout工作正常,但是在keycloak中定义的角色在spring Boot 应用程序中不可用
我已经尝试了keycloak中的所有配置。我可以实现角色在Spring安全认证中的Realm_access下可用,但只是作为一个属性。
的数据
我期望Spring将这些Map到权限中,因此我们可以使用hasRole等。
我是否需要更改spring或keycloak中的配置,以使此Map发生,或者我真的需要手动Map这些?
设置本身非常简单。
这是属性文件:
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();
}
型
1条答案
按热度按时间23c0lvtd1#
RTFM.角色Map对于OAuth2客户端(您的情况),具有JWT解码器的资源服务器以及具有token introspection的资源服务器来说是不同的,但是在Spring Security文档中详细解释了使用Java conf进行Map。
如果您更喜欢从应用程序属性定义权限Map,而不是编写Java代码,那么可以看看我的starter(它也会简化配置的其他方面)。
请注意,**使用
oauth2Login()
**在过滤器链中禁用CSRF保护是非常不安全的,更一般地说,每次安全性都是基于会话的。我建议你阅读我的OAuth2要领和教程。