aku*_*ma8 2 spring-security spring-boot spring-security-oauth2 keycloak spring-boot-admin
我有一个由 Keycloak 保护的 Spring Boot 管理应用程序,我定义了一个具有领域角色的用户ACTUATOR。问题是身份验证后 Spring Security 无权访问领域角色。我可以看到授予的权限:Granted Authorities: ROLE_USER, SCOPE_actuator_access, SCOPE_profile'
查看文档,我发现这一部分:基于委派的策略与 OAuth2UserService这是我的配置:
这是我的配置:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure( HttpSecurity http ) throws Exception {
http.csrf().disable().cors().disable();
http.authorizeRequests()
.antMatchers( "/error","/instances", "/**/*.css", "/**/img/**", "/**/third-party/**", "/*.js" )
.permitAll()
.anyRequest().hasRole( "ACTUATOR" )
.and()
.oauth2Login( oauth2 -> oauth2.userInfoEndpoint(
userInfo -> userInfo.oidcUserService( this.oidcUserService() ) ) );
}
// I just copy-paste the doc's code to play with it...
private OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService() {
final OidcUserService delegate = new OidcUserService();
return ( userRequest ) -> {
OidcUser oidcUser = delegate.loadUser( userRequest );
//TODO find a way to extract realm roles
OAuth2AccessToken accessToken = userRequest.getAccessToken();
Set<GrantedAuthority> mappedAuthorities = new HashSet<>();
oidcUser = new DefaultOidcUser( mappedAuthorities, oidcUser.getIdToken(), oidcUser.getUserInfo() );
return oidcUser;
};
}
Run Code Online (Sandbox Code Playgroud)
我希望使用该方法oidcUserService()从令牌中提取 Keycloak 领域角色,但该方法根本没有执行。我的意思是从 Keycloak 成功进行身份验证并重定向到应用程序后,oidcUserService()方法不会执行。它似乎只在应用程序启动时执行,这很奇怪。
问题是在这种情况下如何检索领域角色?
编辑
我在这里添加了一个示例项目:https ://github.com/akuma8/sba-keycloak-spring-security
安全配置application.yml一流SecurityConfig
我发现为什么oidcUserService()认证后没有调用该方法。原因是令牌的类型,我愚蠢地从 Spring Security 文档中复制了代码,而没有注意该信息。
在文档中,它是关于OidcUserRequest,而在我的例子中,它是,所以这是与 之间OAuth2UserRequest的冲突。将方法更改为:OAUTH2OIDC
private OAuth2UserService<OAuth2UserRequest, OAuth2User> oauth2UserService() {
// code extracting authorities from JWT here
}
Run Code Online (Sandbox Code Playgroud)
解决了我的问题。我现在可以从访问令牌获取 Keycloak 领域角色。
| 归档时间: |
|
| 查看次数: |
3265 次 |
| 最近记录: |