spring-security 为什么在WebSecurityConfigurerAdapter下的Sping Boot 中,OAuth2UserService没有为角色授权运行?

jgovgodb  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(116)

我尝试按照Spring Security的文档使用Spring Security实现角色,但是我还不能运行OAuth2 UserService。
这是我拥有的配置文件和OAuth2 UserService,它遵循他们的文档。终端打印ABC,但不打印DEF,所以当我转到页面“/test”时,它没有运行。我使用的是带有OAuth2的Google Identity。
身份验证工作正常,但不幸的是,这不起作用。我尝试过使用GrantedAuthoritesMapper和其他一些示例,但同样的事情发生了。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .logout(l -> {
            l.logoutSuccessUrl("/").permitAll();})
        .authorizeRequests(a -> a
            .antMatchers("/", "/js/**", "/css/**").permitAll()
            .antMatchers("/test").hasRole("ADMIN")
            .anyRequest().authenticated()
        )
        .csrf(c -> c
            .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
        )
        .oauth2Login(oauth2 -> oauth2
            .userInfoEndpoint(userInfo -> userInfo
                .userService(this.oauth2UserService()
            ))
        );
    }

private OAuth2UserService<OAuth2UserRequest, OAuth2User> oauth2UserService() {
    final DefaultOAuth2UserService delegate = new DefaultOAuth2UserService();
    System.out.println("ABC");

    return (userRequest) -> {
        System.out.println("DEF");
        OAuth2User oauth2User = delegate.loadUser(userRequest);
        Set<GrantedAuthority> mappedAuthorities = new HashSet<>();

        mappedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));

        oauth2User = new DefaultOAuth2User(mappedAuthorities, 
                oauth2User.getAttributes(), oauth2User.getName());
        return oauth2User;
    };
}

任何帮助都将不胜感激。谢谢。

q1qsirdb

q1qsirdb1#

如果您还没有找到答案,我的问题已经通过将作用域添加到www.example.com文件中得到了解决application.properties。

spring.security.oauth2.client.registration.google.scope=profile,email

相关问题