Запрос Аутентификации Axios на Drupal-invalid_grant

Запрос Аутентификации Axios на Drupal-invalid_grant

30.08.2019 11:27:03 Просмотров 28 Источник

Я пытаюсь аутентифицироваться на Drupal из приложений на JS с использованием "Аксиос".

Я могу аутентифицироваться через Postman и через терминал с помощью curl, но я не могу аутентифицироваться с помощью axios.

Вот что я делаю:

const uri = 'https://test.com/oauth/token'

const data = new FormData();
data.append("client_id", "xxxxxx");
data.append("client_secret", "secret");
data.append("grant_type", "password");
data.append("username", "user");
data.append("password", "secret");
data.append("scope", "");

axios({
  method: 'POST',
  url: uri,
  headers: {}, 
  data: data
})
.then(res => {
  console.log("res", message);
})
.catch(err => {
  console.log("error in request", err);
});

Это то, что я получаю в консоли:

 data:
  { error: 'invalid_grant',
    error_description:
     'The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.',
    hint: 'Check the configuration to see if the grant is enabled.',
    message:
     'The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.' } } }

Это то, что я получаю в Drupal:

League\OAuth2\Server\Exception\OAuthServerException: The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.
У вопроса есть решение - Посмотреть?

Ответы - Запрос Аутентификации Axios на Drupal-invalid_grant / Axios authentication request to Drupal - invalid_grant

Jens Wegar

04.10.2019 10:53:28

У меня была такая же проблема с использованием axios, а ниже-то, что, наконец, сработало для меня, чтобы аутентифицироваться против конечной точки simple_oauth в Drupal 8.

 import * as axios from 'axios';

 const axiosAPI = axios.create();
 axiosAPI.defaults.baseURL = 'http://localhost/';
 axiosAPI.defaults.timeout = 30000;

 async authenticate(username, password){
   const params = new URLSearchParams();
   params.append('grant_type',  'password');
   params.append('client_id',  'xxx-yyy-zzz');
   params.append('client_secret', 'somesupersecret');
   params.append('username', username);
   params.append('password', password);

   try{
     let response = await axiosAPI.post('/oauth/token', params);

     console.log(response.data);

   } catch(e){
     console.error(e);
   }
}

Таким образом, ключом было использование URLSearchParams для кодирования параметров, а не кодирования данных в форме. Это было фактически упомянуто в документах по адресу https://github.com/axios/axios под заголовком "использование формата application/x-www-form-urlencoded" я понял, что не должен просто публиковать форму.

Закрыть X