如何确保我的自定义 OidcUserService 调用默认值?

Sle*_*led 5 spring spring-security okta spring-oauth2

tl;dr:尽管已注册,为什么我的还没有OidcUserService注册?


我正在尝试OAuth2UserService通过注册它来使用我自己的,如Spring Security 文档中所述。

OidcUserService.loadUser(OidcUserRequest)但是,当我在]( https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/client/oidc/userinfo/OidcUserService.html上设置断点时#loadUser-org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest- )方法,它一直点击com.okta.spring.boot.oauth.OktaOidcUserService相反!我正在使用, com.okta.spring:okta-spring-boot-parent:1.2.2-SNAPSHOT可能是什么问题?

我注册了我OidcUserService 喜欢的记录

@SpringBootApplication
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class RedirectCodeFlowApplication {

    public static void main(String[] args) {
        SpringApplication.run(RedirectCodeFlowApplication.class, args);
    }

    @Configuration
    static class WebConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            final OidcUserService delegate = new OidcUserService();

            http.authorizeRequests().anyRequest().authenticated()
                .and()
                .oauth2Login()
                .userInfoEndpoint()
                .oidcUserService( (userRequest) -> {
                        System.out.println( "!!xXx!! never gets here" );

                        OidcUser oidcUser = delegate.loadUser(userRequest);

                        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)

我调用的方法很简单:

@RestController
public class WelcomeController {

    @GetMapping("/")
    public Welcome getMessageOfTheDay(Principal principal) {
        return "The message of the day is boring.";
    }
}
Run Code Online (Sandbox Code Playgroud)

这全部改编自: https: //github.com/okta/okta-spring-boot/blob/master/examples/redirect-code-flow/src/main/java/com/okta/spring/example/RedirectCodeFlowApplication。爪哇

小智 2

这是一个已知问题: https: //github.com/okta/okta-spring-boot/issues/136(仍然打开为:https://github.com/okta/okta-spring-boot/issues/160

这是一种解决方法,用于处理 HttpSecurity 和 HttpConfigurer 的加载方式。

我不是 100% 确定我们可以解决这个问题,但是,公开添加自定义 GrantedAuthority 的方法很容易。

我将再次研究前者,但作为最后的手段,您能否确认您正在尝试设置自定义 GrantedAuthority ?