Keycloak Отсутствует параметр формы: grant_type - PullRequest
0 голосов
/ 15 декабря 2018

У меня на локальной машине работает автономная работа keycloak.

Я создал новую область под названием «spring-test», затем новый клиент под названием «login-app»

Согласно остальной документации:

POST: http://localhost:8080/auth/realms/spring-test/protocol/openid-connect/token

{
    "client_id": "login-app",
    "username": "user123",
    "password": "pass123",
    "grant_type": "password"
}

должен дать мне токен jwt, но я получаю неверный запрос с ответом

{
    "error": "invalid_request",
    "error_description": "Missing form parameter: grant_type"
}

Я предполагаю, что что-то отсутствует в моей конфигурации.

РЕДАКТИРОВАТЬ: Я использовал тело json, но оно должно быть закодировано в форме URL: работает следующее тело:

token_type_hint:access_token&token:{token}&client_id:{client_id}&client_secret:{client_secret}

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Для тех, у кого проблемы с curl, команда curl выглядит следующим образом

curl -d "client-secret=<client-secret>" -d "client_id=<client-id>" -d "username=<username>" -d "password=<password>" -d "grant_type=password" "http://localhost:8080/auth/realms/<realm-name>/protocol/openid-connect/token"
0 голосов
/ 07 июля 2019

Вот полный пример замены code на access_token с keycloak полномочиями с использованием axios.

. В этом примере я использовал querystring :

npm install querystring --save-dev

или

yarn add querystring --dev

Отправка запроса:


import queryString from 'querystring'

const params = {

    grant_type: 'authorization_code,
    client_id: 'client-id-here',
    code: 'code-from-previous-redirect',
    redirect_uri: location.protocol + '//' + location.host

};

axios({

    method: 'post',
    url: 'https://my-keycloak.authority/token',
    data: queryString.stringify(params),
    config: {
        headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }

}).then(response => {

    console.log(response.data);

}).catch(error => {

    console.error(error);

});

Необходимо отправить запрос POST с параметрами в виде строки в кодировке URL в запросеbody.

Объект FormData не работает.

0 голосов
/ 15 декабря 2018

Вы должны отправить свои данные в POST-запросе со значением заголовка Content-Type, установленным на application/x-www-form-urlencoded, а не json.

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