У меня есть сервер аутентификации, на котором работает Keycloak, и веб-сервер Apache2 с mod_auth_openidc для авторизации OAuth2.
С помощью браузеров я могу успешно перехватить доступ к защищенному ресурсу, чтобы перенаправить пользователя на страницу входа в Keycloak. После успешного входа в систему пользователь будет перенаправлен на ссылку ресурса.
С помощью Postman я также могу получить токен доступа JWT с потоком предоставления пароля, а затем использовать токен доступа для доступа к защищенному ресурсу. Код cURL, предоставленный почтальоном, указывает, что также требуется файл cookie mod_auth_openidc_session.
Затем я пытаюсь выполнить двухэтапную команду cURL в Linux CLI.
Сначала я извлекаю токен доступа, используя поток предоставления пароля, как показано ниже. Я инициировал механизм cookie для захвата файлов cookie сеанса, предоставленных mod_auth_openidc.
# RETRIEVE ACCESS TOKEN JSON
curl -L -b ./cookie.jar -c ./cookie.jar -d 'client_id=CLIENT_ID' -d 'client_secret=368127b1-1ee0-4f3f-8429-29e9a93daf9a' -d 'username=USERNAME' -d 'password=PASSWORD' -d 'grant_type=password' 'https://AUTH_SERVER:PORT/auth/realms/REALM/protocol/openid-connect/token
# PARSE ACCESS TOKEN
access_token=`echo $response|jq '.access_token'|cut -d\" -f2`
Затем, используя носитель токена доступа в заголовке и файле cookie jar, я пытаюсь получить доступ к защищенному ресурсу.
curl -b ./cookie.jar -c ./cookie.jar --insecure -L -X GET 'https://RESOURCE_SERVER:PORT/protected_content' --header "'Authorization: Bearer "$access_token"'"
Однако меня все равно перенаправили на страницу входа в Keycloak, а файл cookie сеанса не записывается в файл jar cookie.
Вот записанный jar-файл cookie с удаленной / замененной конфиденциальной информацией.
# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
#HttpOnly_[AUTH_SERVER] FALSE /auth/realms/master/ TRUE 0 KC_RESTART eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI2Y2ZiNjYwOC1kMTlhLTQwZGUtOWJiYS04NzcxOTkzZTIwMWUifQ.eyJjaWQi[REDACTED]4aHhkVDBGZmhBZEVTSm8iLCJub25jZSI6IndTYXNYOWhGeGIxd1hKakNrS2FLMXVadVRGX3ZOZzRGVUZnMTJyYXFWbVkifX0.53645krpwlFnJ09cHAcZhNCci-DhGigu4soN5CVsZQ0
#HttpOnly_[AUTH_SERVER] FALSE /auth/realms/master/ TRUE 0 AUTH_SESSION_ID_LEGACY 6a23b139-05ba-4d22-b9e3-9ae857074814.[AUTH_SERVER]
#HttpOnly_[AUTH_SERVER] FALSE /auth/realms/master/ TRUE 0 AUTH_SESSION_ID 6a23b139-05ba-4d22-b9e3-9ae857074814.[AUTH_SERVER]
#HttpOnly_[RESOURCE_SERVER] FALSE / TRUE 0 mod_auth_openidc_state_XGEq0YKJAwSt8hxdT0FfhAdESJo NVc9Mk1FmN[REDACTED]lydKVtOw0iL-Y9iZMjzcUinutFPn74rmVvI_ERV3C8Wn1Euio8pID0jEAmu9NEfY_MEeuzOzqe6w7I20HZUNQHX0uh_vXR8
Может ли кто-нибудь сказать мне, что я сделал не так в двухэтапном процессе аутентификации / авторизации cURL?