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
В общем, это поток, я сам не тестировал код, поэтому используйте его в качестве примера и не стесняйтесь исправлятьэто если учесть; -)
См. также: