RFC 8414 — Метаданные сервера авторизации — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

RFC 8414 — Метаданные сервера авторизации

Метаданные сервера авторизации OAuth 2.0 и OpenID Connect Discovery — endpoint'ы, поля и то, какие из них Versola вычисляет сама.

Спецификация: RFC 8414, OpenID Connect Discovery 1.0

По метаданным сервера авторизации клиент автоматически узнает endpoint’ы и возможности сервера без ручной настройки.

Статус

Реализован. Отмечено пунктов: 27 из 31.

Endpoint’ы

  • GET /.well-known/oauth-authorization-server
  • GET /.well-known/openid-configuration (псевдоним для OpenID Connect)

Оба возвращают один и тот же JSON-документ, аутентификация не нужна (DiscoveryAndJwksSpec).

Документ по умолчанию

Развертывание начинает с хранимого документа, который оператор может редактировать. Документ, генерируемый для новой установки, выглядит так:

{
  "issuer": "https://id.example.com",
  "authorization_endpoint": "https://id.example.com/authorize",
  "token_endpoint": "https://id.example.com/token",
  "userinfo_endpoint": "https://id.example.com/userinfo",
  "jwks_uri": "https://id.example.com/.well-known/jwks.json",
  "introspection_endpoint": "https://id.example.com/introspect",
  "revocation_endpoint": "https://id.example.com/revoke",
  "pushed_authorization_request_endpoint": "https://id.example.com/par",
  "end_session_endpoint": "https://id.example.com/logout",
  "scopes_supported": ["openid", "profile", "email", "address", "phone", "offline_access"],
  "response_types_supported": ["code", "code id_token"],
  "response_modes_supported": ["query", "fragment", "jwt", "query.jwt", "fragment.jwt"],
  "code_challenge_methods_supported": ["S256"],
  "grant_types_supported": ["authorization_code", "client_credentials", "refresh_token"],
  "subject_types_supported": ["public", "pairwise"],
  "id_token_signing_alg_values_supported": ["ES256"],
  "token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post", "private_key_jwt"],
  "token_endpoint_auth_signing_alg_values_supported": ["ES256", "PS256"],
  "dpop_signing_alg_values_supported": ["ES256", "PS256"],
  "request_object_signing_alg_values_supported": ["ES256", "PS256"],
  "claims_supported": ["sub", "iss", "aud", "exp", "iat", "jti", "nonce", "auth_time", "acr", "amr", "sid"],
  "frontchannel_logout_supported": true,
  "frontchannel_logout_session_supported": true,
  "backchannel_logout_supported": true,
  "backchannel_logout_session_supported": true,
  "authorization_response_iss_parameter_supported": true
}

Поверх хранимого документа auth при выдаче добавляет или перезаписывает поля ниже.

Вычисляемые поля

  • request_parameter_supported — всегда true
  • request_uri_parameter_supported — всегда true; request_uri здесь называет pushed authorization request, а URL, размещенный клиентом, отклоняется (см. RFC 9101)
  • dpop_signing_alg_values_supported, token_endpoint_auth_signing_alg_values_supported и request_object_signing_alg_values_supported — приводятся к алгоритмам, для которых у auth есть верификаторы, и это те же наборы, по которым работают проверки
  • token_endpoint_auth_methods_supported — private_key_jwt всегда добавляется к хранимому значению
  • authorization_signing_alg_values_supported — алгоритмы ключей, которые публикует развертывание (см. JARM)
  • mtls_endpoint_aliases — присутствует, только если настроен listener mutual TLS (см. RFC 8705)

Реализованные поля метаданных

Обязательные:

  • issuer
  • authorization_endpoint
  • token_endpoint

Рекомендуемые:

  • jwks_uri
  • response_types_supported — code и code id_token
  • grant_types_supported
  • token_endpoint_auth_methods_supported
  • revocation_endpoint
  • introspection_endpoint
  • scopes_supported
  • code_challenge_methods_supported — ["S256"]
  • pushed_authorization_request_endpoint (RFC 9126)
  • response_modes_supported

Расширения OpenID Connect:

  • userinfo_endpoint
  • id_token_signing_alg_values_supported
  • claims_supported
  • subject_types_supported
  • end_session_endpoint, frontchannel_logout_supported, backchannel_logout_supported (OIDC logout)
  • authorization_response_iss_parameter_supported (RFC 9207)

Не публикуются:

  • require_pushed_authorization_requests — требование задается для клиента, а не для развертывания
  • acr_values_supported — нет в генерируемом документе
  • tls_client_certificate_bound_access_tokens — поле хранимого документа, которое задает оператор, не вычисляется
  • signed_metadata — не реализовано

Примечания

  • Развертывание, сгенерированное versola-cli, хранит ["ES256"] в id_token_signing_alg_values_supported; созданное раньше сохраняет прежнее значение (до этого изменения — ["PS256"]).
  • Хранимые поля отдаются как записаны. id_token_signing_alg_values_supported не сверяется с ключами, которыми подписывают тенанты, а генерируемый subject_types_supported перечисляет pairwise, хотя выдаются только public-идентификаторы субъекта.
  • Документ выдается один на все развертывание. Различия между тенантами, например поддержка mutual TLS за прокси тенанта, в нем не отражаются.

Куда смотреть

Справочник OpenAPI содержит спецификацию metadata.