Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Jayce444Ответов: 2

Я пытаюсь взаимодействовать с 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? Разве токен учетной записи администратора не должен работать для аутентификации вызовов другим клиентам с главной областью? Могу ли я изменить какой-то параметр в главной области в консоли администратора? Любая помощь приветствуется.

  • У меня такая же проблема при использовании SpringBoot. Эта тема SO помогла мне разобраться в проблеме stackoverflow.com/questions/57477407/ K. Siva Prasad Reddy 04.06.2021

keycloakapihttpsaccess-tokenunauthorized

Ответы

Ответ 1 · рейтинг 6 · v.ladynev

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

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

Вы просто что-то неправильно делаете. См. Пример из модуля 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

Ответ 2 · рейтинг 4 · Tobias Ernst

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы