oauth2.0 Spring Boot - Keykloak角色不可用

qq24tv8q  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(172)

如何将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();
    }

23c0lvtd

23c0lvtd1#

RTFM.角色Map对于OAuth2客户端(您的情况),具有JWT解码器的资源服务器以及具有token introspection的资源服务器来说是不同的,但是在Spring Security文档中详细解释了使用Java conf进行Map。
如果您更喜欢从应用程序属性定义权限Map,而不是编写Java代码,那么可以看看我的starter(它也会简化配置的其他方面)。
请注意,**使用oauth2Login()**在过滤器链中禁用CSRF保护是非常不安全的,更一般地说,每次安全性都是基于会话的。我建议你阅读我的OAuth2要领和教程。

相关问题