在边缘服务中混合弹簧安全性并调用oauth2提供程序不起作用

时间:2015-10-02 09:40:16

标签: spring-security spring-security-oauth2 spring-cloud

我们有一个项目负责成为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 security以添加一些管理站点等。并且存在问题。 每当我们打电话时:

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);


}
}

0 个答案:

没有答案