Spring安全OAuth中的多资源服务器配置

时间:2015-10-10 06:05:59

标签: oauth spring-security spring-boot

我正在尝试使用单个Auth服务器从多个客户端访问多个资源服务器。

我正在尝试从同一个auth服务器访问两个资源服务器,我的资源服务器配置如下所示。

@Bean
@Scope("prototype") 
protected ResourceServerConfiguration resource1() {

    ResourceServerConfiguration resource = new ResourceServerConfiguration();
    resource.setConfigurers(Arrays.<ResourceServerConfigurer> asList(new ResourceServerConfigurerAdapter() {
    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId(RESOURCE_ID1).tokenStore(tokenStore);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
        .csrf().disable()
        .requestMatchers().antMatchers("/greeting")
        .and()
        .authorizeRequests()
        .antMatchers("/users").hasRole("ADMIN");                
    }
}   
resource.setOrder(4);
    return resource;
}

@Bean
@Scope("prototype") 
protected ResourceServerConfiguration resource2() {
    ResourceServerConfiguration resource = new ResourceServerConfiguration();
    resource.setConfigurers(Arrays.<ResourceServerConfigurer> asList(new ResourceServerConfigurerAdapter() {
        @Override
        public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
            resources.resourceId(RESOURCE_ID2).tokenStore(tokenStore);
        }

        @Override
        public void configure(HttpSecurity http) throws Exception {
            http
            .csrf().disable()
            .requestMatchers().antMatchers("/welcome")
            .and()
            .authorizeRequests()
            .antMatchers("/users").hasRole("ADMIN");
        }
    }   
    resource.setOrder(5);
    return resource;
}

由于WebSecurityConfigurerAdapter的默认顺序为3,我已将资源订单服务器分别配置为4和5。

但配置的Beans正在被覆盖,我可以访问具有订单5的资源“/ welcome”,如果我尝试访问资源“/ greeting”,我收到以下错误,

{  "timestamp": 1444400211270,  "status": 403,  "error": "Forbidden",  "message": "Expected CSRF token not found. Has your session expired?",  "path": "/greeting"}

如果我在资源之间交换顺序,我可以访问具有最高值5的资源。

注意:我有两个客户端,因此可以访问RESOURCE1,另一个可以访问RESOURCE2。

请告知我遗失的事情。

1 个答案:

答案 0 :(得分:1)

来自ResourceServerConfigurer的Javadoc:

  

应用程序可能会提供此接口的多个实例   general(与其他安全配置程序一样),如果不止一个   配置相同的属性,然后最后一个获胜。配置器   在应用之前按Order排序。

因此,可以在permitAll()路径中添加/welcome