2016-11-04 8 views
0

У меня есть приложение для загрузки весны, с аутентификацией Oauth и сервером ресурсов, а также в одном приложении. У меня есть внешний интерфейс на отдельном сервере, из отдельного места. Мой внешний интерфейс приложения не кажется, чтобы продолжить предполетной операцию внутреннего интерфейса, который всегда отвечает с 401. Моя конфигурация выглядит как следующим образом:Весенняя безопасность, OAUTH Cors, ОПЦИИ

// ... annotations 
public class OAuthConfig extends WebSecurityConfigurerAdapter { 

    // ... authencication providers 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     // @formatter:off 
     http 
     .csrf().disable() 
     .authorizeRequests() 
      .antMatchers("/", "/*.html", "layout/**", "/js/**", "/css/**", "/images/**", "/font/**", 
        "/signup", "/register", 
        "/oauth/**") 
      .permitAll() 
      .and() 
       .authorizeRequests() 
       .antMatchers(HttpMethod.OPTIONS, "/oauth/**").permitAll() 
      ; 

     // @formatter:on 
    } 

    // ... beans 
} 

Обратите внимание, что я должен был добавить исключения для статического контента, а также, так как он, похоже, не работает по-другому, несмотря на любую документацию.

// ... annotations 
public class MvcConfig extends WebMvcConfigurerAdapter { 

// ... resource resolver, view resolver 

    @Override 
    public void addCorsMappings(CorsRegistry registry) { 
     registry.addMapping("/**"); 
    } 

} 

Я попытался указать более явно, но ничего не удалось, а также:

@Override 
public void addCorsMappings(CorsRegistry registry) { 
    registry.addMapping("/api/**").allowedMethods("GET","POST","OPTIONS","DELETE","UPDATE"); 
    registry.addMapping("/register"); 
    registry.addMapping("/signup"); 
    registry.addMapping("/oauth/**").allowedMethods("GET","POST","OPTIONS"); 
} 
//... annotations 
public class ResourceServerConfig extends ResourceServerConfigurerAdapter { 

    // ... resource id config 

    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     //@formatter:off 
     http 
     .anonymous().disable() 
      .requestMatchers() 
      .antMatchers("/api/**") 
     .and() 
      .authorizeRequests() 
      .antMatchers("/api/**").authenticated() 
     .and() 
      .exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler()); 
     //@formatter:on 
    } 

} 

На данный момент я не могу понять, если я пропустил что-то важное для настройки, чтобы получить CORS поверх конечной точки аутентификации (как и другие части конечных точек API)

ответ

0

Если у вас есть ошибка HTTP 401, для меня это не значит, что проблема в конфигурации CORS. 401, как предполагается, означает несанкционированный доступ, поэтому проблема может быть в конфигурации безопасности. Если это была проблема с перекрестным происхождением, у вас была бы ошибка, например, заголовок «Нет» Access-Control-Allow-Origin »присутствует на запрошенном ресурсе».

На самом деле у меня есть одно из моих приложений, которое получило HTTP 200 (OK) по запросу, который терпит неудачу из-за проблемы с перекрестным происхождением.

И если вам нужна помощь, вы должны действительно предоставить подробную информацию о запросе/ответе, где вы получили код ошибки 401.


Я знаю, что это не настоящий ответ, но у меня нет репутации, чтобы прокомментировать, поэтому я надеюсь, что это поможет.

0

Вы также можете настроить CORS на сервере. Что будет работать для всех API вашего приложения. Или вы установите «Access-Control-Allow-Origin to *» в своем ответе и ответе, чтобы ваш api мог дать ответ на любой запрос с любого сервера.