Спецификация: 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.