React Oauth2 Header Проблема: авторизация с помощью clientID и client-secret - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь передать свои параметры на сервер и получить токены доступа. Я проверил это с cURL и Почтальоном, и это работает как шарм там. Тем не менее, с React я всегда получаю 401 Unauthorized (это то же самое, что я получаю, когда не добавляю clientId и secret в Postman). Итак, я подозреваю, что в настройке учетных данных может быть что-то не так. На Почтальоне я делаю clinetid:clientpass@server:/path. Если используется no-cors, как указано ниже, оно проходит, но я получаю ответ opaque, который не имеет тела (ответ находится в браузере, но не в запросе на выборку). Если я не получу 401 Несанкционированный.

Вот подробности

  1. Сервер: localhost: 8080

  2. путь: oauth / токен

  3. идентификатор клиента: clinetId

  4. Clinet-Secret: clientSecret

{x-www-form-urlencoded values}

  1. имя пользователя: user@test.com
  2. пароль: passUser
  3. grant_type: пароль

Вот что у меня есть:

let myHeader = new Headers({
        "Authorization": "Basic " + btoa("clientId" + ':' + "clientSecret"),
        "Content-Type": "application/x-www-form-urlencoded"
    });


var data = new URLSearchParams();
        data.append('grant_type', 'password');
        data.append('userName', 'user@test.com');
        data.append('password', 'passUser');

const requestOptions = {
        method: 'POST',
        headers: myHeader,

        body: data,
        mode: 'no-cors', // if this is disabled it fails
        withCredentials: true,
        credentials: 'include'
    };

return fetch(`http://localhost:8080/oauth/token`, requestOptions)
.then(handleResponse)
.then(...

Заголовок ответа выглядит как

HTTP/1.1 401 Unauthorized
Date: Thu, 28 Mar 2019 01:50:04 GMT
WWW-Authenticate: Basic realm="oauth2/client"
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Pragma: no-cache
X-Frame-Options: DENY
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: access-control-allow-origin, authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 1800
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Content-Length: 0

Конфигурация безопасности в весенней загрузке выглядит как

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors().and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .anyRequest()
                .authenticated()
                .and().exceptionHandling().authenticationEntryPoint(restAuthenticationEntryPoint).accessDeniedHandler(new RestAccessDeniedHandler());
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("*"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

Любая идея о том, что я делаю неправильно или о направлении на правильном пути, была бы потрясающей. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...