Discovery metadata
В большинстве OIDC-клиентов настройка начинается с issuer и запроса discovery. Проверяйте фактическую запись authorization_endpoint, token_endpoint и jwks_uri.
curl -i http://localhost:8080/realms/master/.well-known/openid-configurationAuthorization endpoint
GET /realms/{realm}/protocol/openid-connect/auth. Клиент отправляет response_type=code, scope=openid, state, code_challenge и code_challenge_method=S256. Redirect URI должен совпадать с зарегистрированным.
curl -i -G 'http://localhost:8080/realms/master/protocol/openid-connect/auth' \
--data-urlencode 'client_id=YOUR_CLIENT_ID' \
--data-urlencode 'redirect_uri=http://localhost:3000/callback' \
--data-urlencode 'response_type=code' \
--data-urlencode 'scope=openid' \
--data-urlencode 'state=SECURE_RANDOM_VALUE' \
--data-urlencode 'code_challenge=BASE64URL_SHA256_VERIFIER' \
--data-urlencode 'code_challenge_method=S256'Token endpoint
POST /realms/{realm}/protocol/openid-connect/token. Код одноразовый; сервер проверяет PKCE verifier, client_id и redirect_uri.
curl -X POST 'http://localhost:8080/realms/master/protocol/openid-connect/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'client_id=YOUR_CLIENT_ID' \
--data-urlencode 'code=ONE_TIME_CODE' \
--data-urlencode 'redirect_uri=http://localhost:3000/callback' \
--data-urlencode 'code_verifier=ORIGINAL_RANDOM_VERIFIER'JWT, issuer и JWKS
Расшифровка JWT недостаточна для доверия. Валидатор должен получить актуальный JWKS и проверить подпись, алгоритм, iss, aud, временные claims и допустимые scopes.
Негативные проверки
- Неверный redirect URI или неизвестный client_id не должны приводить к успешной выдаче кода.
- Повторное использование кода и неверный verifier должны отклоняться.
- Невалидная подпись, issuer или audience должны отклоняться ресурсным сервером.