Vajda
Vajda

Reputation: 1794

How to set custom OAuth2RestTemplate or custom OAuth2ProtectedResourceDetails?

I have frontend app with @EnableOAuth2Sso enabled. Also, I'd like to use custom OAuth2ProtectedResourceDetails to inject into all OAuth2RestTemplate beans (particularly to redefine behavior of OAuth2RestTemplate within OAuth2RestOperationsConfiguration). I just defined my own bean for OAuth2ProtectedResourceDetails but OAuth2RestTemplate still uses the AuthorizationCodeResourceDetails).

@SpringBootApplication(scanBasePackages = {"base.package"})
@EnableOAuth2Sso
@EnableZuulProxy
public class Application extends WebSecurityConfigurerAdapter {

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

@Autowired
private RedirectUriResolver redirectUriResolver;

@Override
public void configure(HttpSecurity http) throws Exception {
    // some http configuration
}

@Bean
public OAuth2ProtectedResourceDetails resource() {
    AuthorizationCodeResourceDetails resource = new CustomAuthorizationCodeResourceDetails(redirectUriResolver);
    return resource;
}
}

Should I redefine whole OAuth2RestTemplate bean somehow or just this OAuth2ProtectedResourceDetails?

Upvotes: 1

Views: 3177

Answers (1)

Ted
Ted

Reputation: 46

You should be able to overload the beans that get setup in OAuth2RestOperationsConfiguration with your own

    @Bean
    @ConfigurationProperties("security.oauth2.client")
    public ClientCredentialsResourceDetails oauth2RemoteResource() {
        ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
        return details;
    }

If not, just create your own beans

@Bean
@ConfigurationProperties("security.oauth2.client")
public ClientCredentialsResourceDetails customOauth2RemoteResource() {
    ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
    return details;
}

@Bean
public OAuth2RestTemplate customOauth2RestTemplate() {
    OAuth2RestTemplate template = new OAuth2RestTemplate(customOauth2RemoteResource(),
            new DefaultOAuth2ClientContext());
    return template;
}

Then use @Qualifier to reference them

@Autowired
@Qualifier("customOauth2RestTemplate")
private RestTemplate restTemplate;

Upvotes: 2

Related Questions