Keycloak логин с API - PullRequest
       2

Keycloak логин с API

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

У меня есть HTML-страница с Javascript, где я хочу, чтобы автоматически войти в систему пользователя.У меня есть следующий код:

var url = "http://localhost:8180/auth/realms/Myrealm/protocol/openid-connect/token";

const response = await fetch(url, {
    mode: 'no-cors',
    method: "POST",
    body: JSON.stringify({
        "client_id":"myclientid",
        "username":"admin",
        "password":"123",
        "grant_type":"password"
    }),
    headers:{
        //"Content-type":"application/x-www-form-urlencoded", 
        "Content-Type": "application/json"
    }
})

На сервере Keycloak я добавил Web Origins '*' .Я получаю следующую ошибку:

POST http://localhost:8180/auth/realms/Myrealm/protocol/openid-connect/token 400 (неверный запрос)

Я не знаю, почему он не работает.Когда я использую терминал, он работает нормально:

curl -i -d "client_id=myclientid" -d "username=admin" -d "password=123" -d "grant_type=password" http://localhost:8180/auth/realms/Myrealm/protocol/openid-connect/token

(версия ключа 4.8.3)


Обновление

const response = await fetch(url, {
    method: "POST",
    body: 'client_id=myclientid&password=123&username=admin&grant_type=password',
    headers:{
        "Content-type":"application/x-www-form-urlencoded"
    }
})

, и я получаю следующий ответ:

response

1 Ответ

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

сейчас работает.Проблема заключалась в отправке JSON, а не application/x-www-form-urlencoded, а также получении ReadableStream вместо строки в качестве ответа.Вот мой код:

    const response = await fetch(url, {
        method: "POST",
        body: "client_id=myclientid&password=123&username=admin&grant_type=password",
        headers:{
            "Content-type":"application/x-www-form-urlencoded"
        }
      });
    response.body.getReader().read().then(function (data){
        var string = new TextDecoder("utf-8").decode(data.value);
        console.log(string);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...