2016-03-11 5 views
0

У меня есть веб-приложение, которое работает со следующей конфигурацией.Добавить OAuth2 в существующее приложение Spring Security

public class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { 
     protected void configure(HttpSecurity http) throws Exception { 
      http 
      .antMatcher("/api/**") 
      .authorizeRequests() 
       .antMatchers("/api/open/**").permitAll() 
       .antMatchers("/api/data/**").authenticated() 
       .antMatchers("/api/user/**").hasRole("USER") 
       .antMatchers("/api/mgr/**").hasRole("MGR") 
       .antMatchers("/api/admin/**").hasRole("ADMIN") 
       .anyRequest().authenticated() 
      .and()    .exceptionHandling().accessDeniedHandler(customBasicAuthenticationAccessDeniedHandler()) 
      .and() 
       .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
      .and() 
       .csrf().disable() //TODO 
       .httpBasic().authenticationEntryPoint(customBasicAuthenticationEntryPoint()); 
     } 
... 
} 

Затем я добавил,

@Configuration 
@EnableAuthorizationServer 
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter { 
    ... 
} 

и

@Configuration 
@EnableResourceServer 
public class ResourceServerConfig extends ResourceServerConfigurerAdapter { 
    //Same as WebSecurityConfigurerAdapter configure() 
    ... 
} 

Из ResourceServerConfig класса теперь все вверх членом экипажа. Пробовал различные способы настройки. Но кажется, что ResourceServerConfigurerAdapter ведут себя совершенно иначе, чем WebSecurityConfigurerAdapter, но у меня нет ни единой подсказки, чтобы заставить это работать.

Нужно ли мне удалить WebSecurityConfigurerAdapter и оставить только ResourceServerConfigurerAdapter? Сделал это, но configure (HttpSecurity) ведет себя по-другому, чем я думал.

Также некоторые ответы stackoverflow рекомендуются для изменения @Order WebSecurityConfigurerAdapter. Но ничего не работает.

Мне нужно знать, что не так, и что правильно, чем писать код.

Цените очень много, если кто-то укажет мне правильное направление.

Спасибо!

+0

У меня такая же проблема, как только я добавлю конфигурацию с '' '@ EnableResourceServer'', моя существующая securityFilterChain будет заменена. Я попытался настроить oauth2 вручную, но конфигурация просто сумасшедшая. Вы что-нибудь узнали в среднем? – Jan

ответ

0

Поделись этим, я намереваюсь быть полезным, а не отвечать на ваш запрос. Я знаю, что документация не так уж хороша. Просто поделитесь своими 2 центами.

Это то, что сработало для меня. Использование Spring-безопасности oauth2 версия 2.0.7

@EnableWebSecurity 
public class SampleMultiHttpSecurityConfig { 

@Configuration 
    @Order(1) 
    public static class ComplexOauth2SpringSecurityConfiguration extends 
      WebSecurityConfigurerAdapter { 

    @Autowired 
    private OAuth2AuthenticationProcessingFilter oAuth2AuthenticationProcessingFilter; 


    @Autowired 
    private OAuth2AuthenticationManager oAuth2AuthenticationManager; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    ... 
    } 
} 

@Configuration 
public static class ComplexOauth2SpringSecurityConfiguration2 extends 
     WebSecurityConfigurerAdapter { 

    @Autowired 
    private OAuth2AuthenticationProcessingFilter oAuth2AuthenticationProcessingFilter; 


    @Autowired 
    private OAuth2AuthenticationManager oAuth2AuthenticationManager; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    ... 
    } 
} 

После этого я просто добавил компонент: сканирование на упаковке, которая оказывает этот класс.

Это прежде всего на стороне сервера. Также обратите внимание на инъекцию фильтра OAuth2AuthenticationProcessingFilter. Это основано на RemoteTokenServices, одним из которых является выполнение проверки токена с сервером авторизации.

<bean id="remoteTokenServices" class="org.springframework.security.oauth2.provider.token.RemoteTokenServices" 
     init-method="init" destroy-method="shutdown"> 
    <property name="checkTokenEndpointUrl" value"..."/> 
</bean> 

Я согласен с тем, что я не использовал сервер ресурсов и сервер авторизации. Они уже были построены для нас. Тем не менее, во время тестирования мы просто создали пару сервисов REST POST для имитации генерации и проверки токенов.

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