API / OIDC

OIDC и OAuth 2.0

Протокол аутентификации для клиентских приложений. Примеры адресов основаны на технической документации проекта и требуют проверки в текущей сборке.

RustCloak / Технические материалы · Сверяйте примеры с используемой версией проекта.

Discovery metadata

В большинстве OIDC-клиентов настройка начинается с issuer и запроса discovery. Проверяйте фактическую запись authorization_endpoint, token_endpoint и jwks_uri.

примеры, проверить путь · bash
curl -i http://localhost:8080/realms/master/.well-known/openid-configuration

Authorization endpoint

GET /realms/{realm}/protocol/openid-connect/auth. Клиент отправляет response_type=code, scope=openid, state, code_challenge и code_challenge_method=S256. Redirect URI должен совпадать с зарегистрированным.

illustrative request · bash
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.

illustrative request · bash
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 должны отклоняться ресурсным сервером.