Я пытаюсь передать свои параметры на сервер и получить токены доступа. Я проверил это с cURL и Почтальоном, и это работает как шарм там. Тем не менее, с React я всегда получаю 401 Unauthorized (это то же самое, что я получаю, когда не добавляю clientId и secret в Postman). Итак, я подозреваю, что в настройке учетных данных может быть что-то не так. На Почтальоне я делаю clinetid:clientpass@server:/path
. Если используется no-cors
, как указано ниже, оно проходит, но я получаю ответ opaque
, который не имеет тела (ответ находится в браузере, но не в запросе на выборку). Если я не получу 401 Несанкционированный.
Вот подробности
Сервер: localhost: 8080
путь: oauth / токен
идентификатор клиента: clinetId
Clinet-Secret: clientSecret
{x-www-form-urlencoded values}
- имя пользователя: user@test.com
- пароль: passUser
- 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;
}
Любая идея о том, что я делаю неправильно или о направлении на правильном пути, была бы потрясающей. Спасибо.