2015-10-10 1 views
1

Я пытаюсь использовать один сервер Auth для доступа к нескольким серверам ресурсов от нескольких клиентов.Конфигурация сервера нескольких ресурсов в безопасности Spring OAuth

Я пытаюсь получить доступ к двум серверам ресурсов с одного сервера 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 соответственно.

Но настроенные Бобы становятся переопределены, и я могу получить доступ к ресурсу «/ прием», который имеет порядок 5 и если я пытаюсь получить доступ к ресурсу «/ приветствие», я получаю следующее сообщение об ошибке,

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

Если я поменять порядок между ресурсами, я могу получить доступ к ресурсу, который имеет максимальное значение 5.

Примечание: у меня есть два клиента, чтобы можно было получить доступ к RESOURCE1 и другой может получить доступ к Resource2.

Прошу прощения за то, что мне не хватает.

ответ

0

От Javadoc из ResourceServerConfigurer:

Приложения могут предоставить несколько экземпляров этого интерфейса, и в целом (как с другими Проектировщики безопасности), если более чем один настраивает то же свойство, то последний один выигрывает. Конфигураторы сортируются по {@link Order} перед применением.

Так что, возможно, на обеих сторонах конфигурации можно поместить разрешение() на/приветственный путь.

Смежные вопросы