Профили безопасности — Versola Docs
VersolaVersola/docs
До 1.00.7.1versola.kzGitHub

Профили безопасности

Что проверяют профили безопасности тенанта standard и fapi2 при регистрации клиента и в рантайме, чем они отличаются и как выбрать один из них.

Профиль безопасности — настройка тенанта, которая определяет, каких клиентов он допускает и насколько строго auth обрабатывает их запросы. Профилей два: fapi2 (по умолчанию) и standard (не рекомендуется, оставлен только для совместимости). Профиль выбирается при создании тенанта и потом не меняется.

Что такое профиль

У каждого тенанта ровно один профиль безопасности. Он проверяется дважды:

  • При регистрации. central отказывает в создании или изменении клиента, настройки которого профиль не допускает, и перечисляет все нарушения в одной ошибке.
  • В рантайме. auth строже обрабатывает запросы клиентов тенанта: кто может аутентифицироваться на /token, /par, /introspect и /revoke, что должно быть в client assertion и request object, обязателен ли PKCE.

Два профиля:

ПрофильНазначение
fapi2Требования FAPI 2.0 Security Profile: только конфиденциальные клиенты, без общих секретов, токены с привязкой к отправителю, pushed authorization requests. Значение по умолчанию.
standardОбычный OAuth 2.0 / OpenID Connect. Допускает client secret, публичные клиенты, ключи RS256 и private-use схемы redirect URI. Не рекомендуется: оставлен только для совместимости с клиентами, которые не могут выполнить требования fapi2.

Часть правил одинакова для обоих профилей: единственный метод PKCE — S256, nonce обязателен, если response_type содержит id_token, а redirect URI с обычным http на хост, не являющийся loopback, отклоняется.

Сравнение

Аспектfapi2 (по умолчанию)standard
Аутентификация клиентаТолько private_key_jwt, tls_client_auth или self_signed_tls_client_authТакже client_secret или без аутентификации (публичный клиент)
Публичные клиенты и client secretОтклоняются при регистрации. Публичный клиент, который всё же существует, получает invalid_client на /token, /par, /introspect и /revokeДопускаются
Токены с привязкой к отправителюОбязательны: DPoP (dpopBoundAccessTokens) или токены, привязанные к сертификатуНеобязательны для клиента
PKCES256, обязателен для каждого клиентаS256. Конфиденциальный клиент может его не использовать; публичным клиентам и клиентам нативных приложений за edge PKCE всё равно нужен
Pushed authorization requests (PAR)Обязательны для каждого клиента с redirect URIНеобязательны (requirePushedAuthorizationRequests)
Redirect URIhttps. Loopback http только для клиентов native или для любого клиента, если развёртывание не в prodhttps, loopback http и private-use схемы в обратной доменной записи (например, com.example.app:/callback)
Ключ подписи токеновPS256 или ES256. RS256 отклоняется (400)PS256, ES256 или RS256
aud в client assertionРовно строка issuerIssuer или issuer с путём эндпоинта
Request objectnbf и jti обязательны. aud — ровно строка issuernbf необязателен. jti необязателен, при наличии проверяется на повтор. aud — issuer или issuer с /authorize
Hybrid flow (response_type=code id_token)nonce обязателенnonce обязателен

Защита от повторного использования jti для request object и client assertion действует в обоих профилях.

Неизменяемость и значения по умолчанию

Профиль фиксируется при создании тенанта.

  • POST /configuration/tenants принимает необязательное поле securityProfile (standard или fapi2). Если его нет, тенант получает fapi2.
  • PUT /configuration/challenges/challenge-settings принимает текущее значение тенанта и отклоняет любое другое с ответом 400.
  • Значение хранится вместе с настройками challenges тенанта и возвращается в них как securityProfile.

Перейти с standard на fapi2 позже нельзя. Чтобы сменить профиль, создайте новый тенант с нужным профилем и заново зарегистрируйте клиентов.

Как выбрать

Берите fapi2. Профиль standard не рекомендуется: он оставлен только для совместимости с клиентами, которые не могут выполнить требования fapi2, и тенант на нём теряет перечисленные выше защиты. Выбирайте его, только если клиент, который вам нужно поддержать, не может выполнить fapi2, например:

  • Сторонее приложение аутентифицируется по client secret и не поддерживает DPoP и mTLS.
  • Публичный клиент обращается к auth напрямую, например одностраничное приложение без edge перед ним.
  • Нужен ключ RS256 для существующего relying party, например для инструмента проверки соответствия.

Смешивать профили нужно через тенанты, а не через клиентов: клиентов, которым нужен standard, держите в отдельном тенанте.

В консоли администратора

  • Tenants. В форме создания есть поле Security profile со значениями FAPI 2.0 (recommended) и Standard. При редактировании существующего тенанта поле не показывается.
  • Clients. Мастер создания читает профиль тенанта. На шаге 1 панель плана показывает фиксированные правила для выбранного типа клиента (Web app, Mobile or desktop app, Service app). На тенанте standard панель добавляет заметку о том, что допускаются client secret, ключи RS256 и публичные нативные клиенты. При fapi2 сервисный клиент выбирает только между private_key_jwt и mTLS.
  • Challenges & Security. Ключи RS256 в списке ключей подписи показываются, только если тенант не fapi2.

Приложения за edge остаются в рамках FAPI в обоих профилях. Мастер включает токены, привязанные к сертификату, для веб-клиента за edge, а для нативного клиента — токены с привязкой к DPoP и redirect через App Link.

В Central API

ПолеГдеЗначения
securityProfileзапрос POST /configuration/tenants, настройки challengesstandard, fapi2
authMethodрегистрация клиентаclient_secret, private_key_jwt, tls_client_auth, self_signed_tls_client_auth, none. Не меняется после создания
dpopBoundAccessTokens, certificateBoundAccessTokensрегистрация клиентаboolean, значения по умолчанию нет
requirePushedAuthorizationRequestsрегистрация клиентаboolean, значения по умолчанию нет
applicationTypeрегистрация клиентаweb, native

Полные схемы запросов — в спецификации Central API.

Чем это не является

Профиль безопасности — набор проверок, которые применяет Versola, а пока не сертификация. Versola не проходила тестирование на соответствие FAPI 2.0 в OpenID Foundation, и эта страница не заявляет никаких результатов. Мы планируем пройти сертификацию. Реализованные требования FAPI 2.0 перечислены на странице FAPI 2.0.

См. также