Профиль безопасности — настройка тенанта, которая определяет, каких клиентов он допускает и насколько строго 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) или токены, привязанные к сертификату | Необязательны для клиента |
| PKCE | S256, обязателен для каждого клиента | S256. Конфиденциальный клиент может его не использовать; публичным клиентам и клиентам нативных приложений за edge PKCE всё равно нужен |
| Pushed authorization requests (PAR) | Обязательны для каждого клиента с redirect URI | Необязательны (requirePushedAuthorizationRequests) |
| Redirect URI | https. Loopback http только для клиентов native или для любого клиента, если развёртывание не в prod | https, loopback http и private-use схемы в обратной доменной записи (например, com.example.app:/callback) |
| Ключ подписи токенов | PS256 или ES256. RS256 отклоняется (400) | PS256, ES256 или RS256 |
aud в client assertion | Ровно строка issuer | Issuer или issuer с путём эндпоинта |
| Request object | nbf и jti обязательны. aud — ровно строка issuer | nbf необязателен. 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, настройки challenges | standard, 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.