Spring Boot - Keykloak 角色不可用

问题描述 投票:0回答:1

如何将 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();
    }
spring-boot spring-security oauth-2.0 keycloak roles
1个回答
0
投票

RTFM。对于 OAuth2 客户端(您的情况)、对于 OAuth2 资源服务器使用 JWT 解码器以及对于资源服务器使用令牌内省,角色映射的完成方式有所不同,但 Spring Security 文档中对此进行了详细解释。

如果您更喜欢从应用程序属性定义权限映射而不是编写 Java 代码,您可以查看 my starter (它也将简化应用程序配置的其他方面)。

© www.soinside.com 2019 - 2024. All rights reserved.