Spring security 在边缘服务中混合使用spring安全性和调用oauth2提供者不起作用

Spring security 在边缘服务中混合使用spring安全性和调用oauth2提供者不起作用,spring-security,spring-security-oauth2,spring-cloud,Spring Security,Spring Security Oauth2,Spring Cloud,我们有一个项目,负责成为oauth2提供商的代理。其中大多数都是常见的,比如facebook、twitter,但其中一个是针对我们公司的。因此,我们有几个: @Bean public OAuth2RestTemplate providerOAuth2RestTemplate(OAuth2ClientContext clientContext) { OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(provider

我们有一个项目,负责成为oauth2提供商的代理。其中大多数都是常见的,比如facebook、twitter,但其中一个是针对我们公司的。因此,我们有几个:

@Bean
public OAuth2RestTemplate providerOAuth2RestTemplate(OAuth2ClientContext clientContext) {
    OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(providerOAuth2ResourceDetails(), clientContext);
    return oAuth2RestTemplate;
}

@Bean
public OAuth2ProtectedResourceDetails providerOAuth2ResourceDetails() {
    AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
    resource.setAccessTokenUri(tokenUri);
    resource.setUserAuthorizationUri(authorizationUri);
    resource.setUseCurrentUri(false);
    resource.setPreEstablishedRedirectUri(redirectUri);
    resource.setClientId(clientId);
    resource.setClientAuthenticationScheme(clientAuthenticationScheme);
    resource.setClientSecret(clientSecret);
    return resource;
}
我们使用它们取决于哪个url请求进入我们的代理。我们做一些事情,然后打电话:

providerOAuth2RestTemplate.getAccessToken();
以上所有作品!:)它要求提供商登录,显示正确的表单,例如从facebook等

但是,我们想将spring安全性添加到我们的代理中,以添加一些管理站点等,但存在一个问题。 无论何时我们打电话:

providerOAuth2RestTemplate.getAccessToken();
我们从代理系统获得一个登录页面,而不是调用oauth2提供者。所以它知道需要登录才能获得访问令牌,但会调用不同的登录…)

Spring安全性基本设置:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
public void configureGlobal(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
    authenticationManagerBuilder
            .inMemoryAuthentication()
            .withUser("user").password("password").roles("USER").and()
            .withUser("admin").password("password").roles("ADMIN");
}

@Override
public void configure(WebSecurity webSecurity) {
    webSecurity
            .ignoring()
            .antMatchers("img/**");
}

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {

    httpSecurity
            .authorizeRequests()
                .antMatchers("/admin").hasRole("ADMIN")
            .anyRequest().permitAll()
            .and()
            .formLogin()
                .permitAll()
            .and()
            .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/logoutSuccess")
                .invalidateHttpSession(true);


}
}