2017-09-03 1 views
0

스프링 오아시스 2를 사용하는 스프링 부트 앱이 완벽하게 작동합니다. 메인 클래스에서 @EnableResourceServer를 사용하면 잘 작동합니다. 나는 그것이 토큰 OAuth를 함께 확인하지 않습니다 요청을 보인다 클래스를 추가 한 후 서비스에 대한 CORS를 사용하도록 설정하지만 클래스WebSecurityConfigurerAdapter가 EnableResourceServer를 재정의 하시겠습니까?

@Configuration 
    public class CorsConfiguration extends WebSecurityConfigurerAdapter { 
     @Override 
     protected void configure(HttpSecurity http) throws Exception { 

      http.csrf().disable(); 
      http.cors(); 

     } 
     @Bean 
     public CorsConfigurationSource corsConfigurationSource() { 
      final org.springframework.web.cors.CorsConfiguration configuration = new org.springframework.web.cors.CorsConfiguration(); 
      configuration.setAllowedOrigins(ImmutableList.of("*")); 
      configuration.setAllowedMethods(ImmutableList.of("HEAD", 
        "GET", "POST", "PUT", "DELETE", "PATCH")); 
      configuration.setAllowCredentials(true); 
    configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type")); 
      final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 
      source.registerCorsConfiguration("/**", configuration); 
      return source; 
     } 
    } 

이하로 구현했습니다. oAuth 토큰 없이도 모든 요청은 서비스에 액세스 할 수 있습니다.

내가 뭘 잘못 했니? 두 가지 모두 사용합니까? 둘 다 일하기 위해 특별한 일이 있습니까? CORS를 활성화하는 더 좋은 방법이 있습니다. (내가 시도한 @CrossOrigin 주석이 작동하지 않았다.)

답변

1

사용 이유가 확실하지 않다 WebSecurityConfigurerAdapter 나는 oAuth를 호출하여 권한 부여를 위해 포워딩하지 않는다고 생각한다. 당신이

유사한 방법이

@Override 
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
     clients.inMemory().withClient("clinet").secret("secret").accessTokenValiditySeconds(3600).scopes("read", "write") 
       .authorizedGrantTypes("password", "refresh_token").resourceIds("resource"); 
    } 
처럼 OAuth를 서버에서 사용했던 자원이 될 수 있어야 그것이 나를 여기

@Configuration 
public class CorsConfiguration extends ResourceServerConfigurerAdapter { 


    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http.cors().and().csrf().disable().authorizeRequests().anyRequest().authenticated(); 
    } 
    @Bean 
    public CorsFilter corsFilter() { 
     final org.springframework.web.cors.CorsConfiguration configuration = new org.springframework.web.cors.CorsConfiguration(); 
     configuration.setAllowedOrigins(ImmutableList.of("*")); 
     configuration.setAllowedMethods(ImmutableList.of("HEAD", 
       "GET", "POST", "PUT", "DELETE", "PATCH")); 
     configuration.setAllowCredentials(true); 

     configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type")); 
     final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 
     source.registerCorsConfiguration("/**", configuration); 
     return new CorsFilter(source); 
    } 
    @Override 
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception { 
     resources.resourceId("resource"); 
    } 

} 

resources.resourceId("resource"); 위해 일이 시도

관련 문제