Keycloak - Получить токен JWT через конечную точку OIDC - PullRequest
0 голосов
/ 15 февраля 2019

В настоящее время я пытаюсь получить пользовательский токен из конечной точки токена Keycloak, используя запрос POST (вместо использования одного из назначенных адаптеров).Я настроил область Keycloak и добавил свою собственную машину в качестве клиента.В документации конечная точка токена описывается следующим образом:

/realms/{realm-name}/protocol/openid-connect/token

Насколько я прочитал в спецификации openid , мне потребуется установить параметр body grant_type=authorization_code, а такжепараметры code и redirect_uri.Мне также нужно будет установить заголовок Authorization, для которого мне понадобится базовый токен.

Пока я получу ответ:

"error": "unauthorized_client",
" error_description ":" INVALID_CREDENTIALS: Неверные учетные данные клиента "

Где я могу получить токен Basic Authorization?Я ожидал, что мне нужно будет указать имя пользователя и пароль, поскольку токен JWT - это то, что я пытаюсь получить в ответ.Нужно ли устанавливать redirect_url, если я просто хочу запросить токен?

1 Ответ

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

Keycloak предлагает более одного способа получения токена доступа пользователя, следуя спецификации OpenId Connect.Здесь у вас есть шаги, чтобы сделать это для потока кода авторизации (рекомендованного для веб-приложений) в соответствии со спецификацией соединения openid: https://rograce.github.io/openid-connect-documentation/explore_auth_code_flow

В основном, если вы не используете какой-либо адаптер,при обнаружении запроса к какому-либо защищенному ресурсу вы должны:

выполнить перенаправление на страницу входа в систему keycloak (имейте в виду, что keycloak использует сущность REALM, поэтому вам также необходимо указать ее):

HTTP/1.1 302 Found
  Location: https://mykeycloakinstance.org/auth/realms/demo/protocol/openid-connect/auth?
    response_type=code
    &scope=openid
    &client_id=s6BhdRkqt3
    &state=af0ifjsldkj
    &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb

Вам необходимо сохранить значение состояния на клиенте, так как оно должно выдержать процесс перенаправления:

Рекомендуется, чтобы клиент использовал этот параметр для поддержания состояния между запросамии обратный звонок.Как правило, смягчение межсайтовых запросов (CSRF, XSRF) выполняется путем криптографического связывания значения этого параметра с файлом cookie браузера.

Вы не взаимодействуете с именем пользователя / паролями.Страница аутентификации Keycloak делает.После успешного входа в систему он будет перенаправлен на вашу страницу с действительным кодом:

HTTP/1.1 302 Found
Location: https://client.example.org/cb?
  code=SplxlOBeZQQYbYS6WxSbIA
  &state=af0ifjsldkj

Здесь вам нужно будет либо проверить, является ли состояние тем, которое вы изначально отправили (возможно, вам придется его отслеживатьчерез веб-сеанс, с использованием файлов cookie), а также для получения токена с использованием этого кода.Вы выполняете POST для конечной точки авторизации с помощью этого кода:

POST /auth/realms/demo/protocol/openid-connect/auth HTTP/1.1
Host: https://mykeycloakinstance.org
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
  &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb

В общем, это поток, я сам не тестировал код, поэтому используйте его в качестве примера и не стесняйтесь исправлятьэто если учесть; -)

См. также:

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