Несанкционированная ошибка при использовании jHipster oAuth, несмотря на CORS

Я запускаю экземпляр jHipster с аутентификацией oAuth и включенным CORS на сервере. Я добавил следующий компонент:

@Bean
public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.setAllowedMethods(Arrays.asList(new String[]{"GET", "PUT", "POST", "DELETE", "OPTIONS"}));
    source.registerCorsConfiguration("/api/**", config);
    source.registerCorsConfiguration("/v2/api-docs", config);
    source.registerCorsConfiguration("/oauth/**", config);
    return new CorsFilter(source);
}

и добавил .antMatchers (HttpMethod.OPTIONS, "/ oauth / token"). allowAll () в конфигурацию ResourceServerConfiguration.

Когда я пытаюсь аутентифицировать пользователя (используя jHipster, работающий на сервере) из приложения, запущенного локально в браузере, я получаю: Метод запроса: ОПЦИИ - Код состояния: 401 Неавторизовано.

Кажется, CORS не настроен должным образом для обработки запросов POST предполетной аутентификации.

Я попытался реализовать некоторые решения, предложенные на Spring Data Rest and Cors и Spring Data Rest и Cors безрезультатно.

Это что-то особенное, что можно сделать в jHipster, чтобы включить аутентификацию для работы из браузера или приложения (не запущенного на сервере jhipster)?


person jvence    schedule 23.02.2016    source источник
comment
Какую версию JHipster вы используете? Если это последняя версия, вы можете включить CORS, просто раскомментировав раздел cors в application.yml.   -  person Matt Raible    schedule 25.02.2016
comment
@MattRaible Привет, Мэтт, спасибо, что изучил это (кстати, я большой поклонник твоей работы и, конечно же, Volkswagen). В любом случае я использую jHipster 2.23.0. CORS уже включен, но есть некоторые проблемы с предполетной аутентификацией POST, как описано выше. Мои собственные сервисы отлично работают с CORS.   -  person jvence    schedule 25.02.2016
comment
Я тоже большой поклонник своего VW! Я не могу дождаться, пока он закончится. ;) Вы пробовали добавить эти лишние строки в CsrfCookieGeneratorFilter? jhipster.github.io/tips/   -  person Matt Raible    schedule 26.02.2016
comment
@jvence привет, удачи с этим? Я столкнулся с той же проблемой ..   -  person i_raqz    schedule 22.03.2016
comment
@i_raqz Извините, не повезло. Просто жду, когда выйдет jHipster 3.0, и посмотрю, существует ли он еще   -  person jvence    schedule 22.03.2016
comment
@jvence Я только что поднял вопрос о репо jhipster. github.com/jhipster/generator-jhipster/issues/3237 Надеюсь, он получит скоро исправят. Мне нужно использовать это :( Есть ли альтернатива или обходной путь?   -  person i_raqz    schedule 22.03.2016
comment
@i_raqz Вы решили эту проблему? Аналогичная проблема с jHipster 3.0 (с использованием сгенерированного исполняемого файла war)   -  person jvence    schedule 01.04.2016


Ответы (1)


Я раскомментировал строки CORS

cors: #By default CORS are not enabled. Uncomment to enable.
    allowed-origins: "*"
    allowed-methods: GET, PUT, POST, DELETE, OPTIONS
    allowed-headers: "*"
    exposed-headers:
    allow-credentials: true
    max-age: 1800

Добавлено в SecurityConfiguration

            **.antMatchers(HttpMethod.OPTIONS, "/**")**
@Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
            .antMatchers(HttpMethod.OPTIONS, "/**")
            .antMatchers("/scripts/**/*.{js,html}")
            .antMatchers("/bower_components/**")
            .antMatchers("/i18n/**")
            .antMatchers("/assets/**")
            .antMatchers("/swagger-ui/index.html")
            .antMatchers("/api/register")
            .antMatchers("/api/activate")
            .antMatchers("/api/login/**")
            .antMatchers("/api/account/reset_password/init")
            .antMatchers("/api/account/reset_password/finish")
            .antMatchers("/test/**");
    }

И это работает до сих пор.

person i_raqz    schedule 01.04.2016