Keycloak API всегда возвращает 401

Я пытаюсь взаимодействовать с Keycloak через его REST API. У меня есть главная область и пользователь-администратор по умолчанию, а также тестовая область. Во-первых, я получаю токен доступа к учетной записи администратора и тестовой области:

let data = {
    grant_type : 'password',
    client_id : 'test-realm',
    username : 'admin',
    password : 'admin'
};
let headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
};
axios.post(
    'https://someurl.com:8080/auth/realms/master/protocol/openid-connect/token',
    qs.stringify(data),
    headers
)

Это нормально работает. Затем я пытаюсь позвонить, чтобы создать пользователя (или сделать что-нибудь еще), и получаю сообщение о несанкционированной ошибке 401:

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': `Bearer ${accessToken}`
};
data = {
    rep: {
        email: "[email protected]",
        username: "[email protected]"
    },
    path: 'test-realm'
};
axios.post('https://someurl.com:8080/auth/admin/realms/test-realm/users',
    qs.stringify(data),
    headers
)

Разве это не правильный способ включения токена? Токен доступа тот, который вы используете для аутентификации других вызовов API? Разве токен учетной записи администратора не должен работать для аутентификации вызовов другим клиентам с главной областью? Могу ли я изменить какой-то параметр в главной области в консоли администратора? Любая помощь приветствуется.


person Jayce444    schedule 23.10.2017    source источник
comment
У меня такая же проблема при использовании SpringBoot. Эта тема SO помогла мне разобраться в проблеме stackoverflow.com/questions/57477407/   -  person K. Siva Prasad Reddy    schedule 04.06.2021


Ответы (2)


Разве это не правильный способ включения токена?

Это правильный способ.

Вы просто что-то неправильно делаете. См. Пример из модуля keycloak-request-token Node.js:

https://github.com/keycloak/keycloak-request-token/blob/master/index.js#L43

Ты используешь

client_id : 'test-realm'

но есть

client_id: 'admin-cli' 

там (не знаю, имеет значение или нет).

Также, чтобы создать пользователя, вы должны использовать

'Content-Type': 'application/json'

Вы можете сослаться на примеры Node.js REST API Keycloak здесь:

https://github.com/v-ladynev/keycloak-nodejs-example/blob/master/lib/adminClient.js

Примеры других полезных вещей, например:

  • пользовательский логин
  • сохранение токена Keycloak в файлах cookie
  • ПО промежуточного слоя централизованного разрешения

можно найти в том же проекте: keycloak-nodejs-example

person v.ladynev    schedule 24.10.2017
comment
Спасибо, что adminClient.js работает! Я просто использовал их функции и использую модуль NPM keycloak-admin-client, и я могу создавать пользователей, удалять их и т. Д. - person Jayce444; 25.10.2017
comment
это работает, но почему я не могу использовать другой клиент? - person Madeo; 08.07.2021
comment
Умм, я пробовал использовать конфиденциальный поток с настраиваемым клиентом, и он работал, но не с общедоступным - person Madeo; 08.07.2021

У меня возникла ошибка 401, поскольку я сгенерировал автономный токен с помощью http://localhost:8080, а затем попытался запросить API с помощью http://keycloak:8080, что недопустимо. К сожалению, журнал не сообщает вам об этом.

Для отладки токенов JWT я рекомендую https://jwt.io/

person Tobias Ernst    schedule 10.12.2019
comment
Спасибо, вот и все - person Abdelmjid EL KIHEL; 21.03.2021
comment
Мы столкнулись с этой проблемой, я предполагаю, что ваш keycloak: 8080 - это контейнерный keycloak. Оказывается, вы можете использовать его, если включите Frontend_Url, но в зависимости от того, как вы это сделаете, путь может пропадать / auth / на ваших URL-адресах перенаправления и т. Д. github.com/keycloak/keycloak-containers/blob/master/server/ - person abenbot; 11.05.2021