Экран Challenges & Security хранит настройки тенанта, которые auth читает при входе пользователя и выпуске токенов: шаблоны одноразовых кодов, время жизни сессий, лимиты попыток, passkey, DPoP, взаимный TLS, ключ подписи токенов и типы authorization details. Сначала выберите тенант в боковой панели: все настройки на странице относятся к нему. Настройки всего развёртывания (политика паролей, логотип на странице входа) лежат в System Settings.
Перед началом
| Что нужно | Разрешение |
|---|---|
| Открыть экран | security:read |
| Добавлять, менять и удалять шаблоны, менять настройки, регистрировать типы authorization details | security:manage |
Без security:manage экран доступен только для чтения: кнопок Add Template, Edit и Create Type нет.
Центральный сервис хранит настройки, а auth загружает их через синхронизацию конфигурации, поэтому сохранённое изменение доходит до auth после очередного обновления, а не мгновенно. Всё, что описано на этой странице, действует в auth; edge эти настройки не читает. У тенанта без строки настроек экран показывает No challenge settings yet и кнопку + Add Challenge Settings. Тенант, созданный в консоли, получает значения по умолчанию из таблиц ниже.

Templates
Шаблоны — это сообщения, в которых auth отправляет код или временный пароль. Описание раздела в консоли: шаблоны OTP и временных паролей для OAuth-клиентов; SMS-шаблоны — обычный текст, email-шаблоны — HTML.
На карточке шаблона видны его ID и три переключателя:
| Переключатель | Значение |
|---|---|
| Type | otp (одноразовый код) или password (временный пароль, который уходит, когда администратор сбрасывает пароль пользователя). |
| Channel | sms или email. |
| Language | Один из активных языков. Активные языки задаются на экране Locales. |
Шаблон определяют вместе ID, тип и канал, поэтому у одного ID могут быть SMS- и email-версия. Клиент выбирает шаблон otp по ID в блоке OTP Settings (OTP Template и OTP channel, см. Клиент). Шаблон password ищется только по каналу: auth берёт единственный шаблон password выбранного администратором канала, какой бы у него ни был ID.
Add Template открывает форму:
| Поле | Правила |
|---|---|
| Template ID | Обязательное. По нему клиенты ссылаются на шаблон. |
| Type | otp или password. |
| Channel | sms или email. Email-шаблон должен содержать корректный HTML; консоль показывает его предпросмотр в изолированном фрейме. |
| Localizations | По одному тексту на каждый активный язык, все обязательны. |
Плейсхолдеры проверяются при сохранении, в консоли и ещё раз в Central:
| Тип | Обязательные плейсхолдеры | Другие плейсхолдеры |
|---|---|---|
otp | {{code}} | {{appName}} заменяется именем клиента на языке пользователя. |
password | {{password}} и {{expiresHours}} | нет |
Текст auth выбирает так: сначала UI-локали пользователя, затем локаль по умолчанию, затем любая доступная локализация.

Значок ✕ на карточке удаляет шаблон для выбранных типа и канала. Central не проверяет, пользуется ли им ещё какой-нибудь клиент. Если у клиента указан ID, для которого нет шаблона его канала, отправлять нечего, поэтому сначала смените OTP Template у клиента, а потом удаляйте старый шаблон.
Challenge Settings
Edit открывает Edit Challenge Settings — одну форму со всеми полями ниже. Save записывает форму целиком одним запросом.

OTP и номера телефонов
| Поле | За что отвечает | По умолчанию | Диапазон |
|---|---|---|---|
| OTP Code Length | Число цифр в одноразовом коде. | 6 | Не меньше 1. Верхней границы нет. |
| OTP Resend After (seconds) | Сколько пользователь ждёт, прежде чем запросить новый код. | 60 s | 0 и больше. |
| Allowed Phones | Префиксы телефонов, с которыми можно войти или зарегистрироваться. Пустой список — принимается любой номер. | пусто | Каждая запись — + и цифры, например +77. |
Номера телефонов хранятся и сравниваются в каноническом виде E.164, и Allowed Phones сопоставляется именно с ним. Номер +787011234567 (с национальным префиксом «8» после кода страны) превращается в +77011234567: он подходит под префикс +77 и не подходит под +78. Записывайте префиксы в каноническом виде. Тот же фильтр действует на login_hint с номером телефона.
Sessions
| Поле | За что отвечает | По умолчанию | Диапазон |
|---|---|---|---|
| Auth Conversation TTL (seconds) | Сколько живёт незавершённый вход (цепочка challenge для одного запроса авторизации). | 900 s (15 мин) | Не меньше 1 s. |
| SSO Session TTL (days) | Сколько действует cookie SSO-сессии после аутентификации. | 1 день | Не меньше одной секунды; консоль принимает дни, в том числе дробные, например 0.5. |
| SSO Session Idle Timeout (seconds) | Online-сессии (без offline_access) истекают после такого простоя. Таймер сдвигается при каждой тихой повторной аутентификации. | пусто (выключено) | Пусто или положительное число секунд. |
| User Agent TTL (days) | Сколько запоминается знакомое устройство (user agent), прежде чем его нужно проверить заново. | 180 дней | Не меньше одной секунды; дроби допустимы. |
Client IP Header
Client IP Header — имя HTTP-заголовка, в котором ваш reverse proxy передаёт настоящий IP клиента. auth использует его для ограничения по IP и берёт первое значение, если в заголовке список через запятую. По умолчанию X-Real-IP. В списке есть X-Real-IP (nginx), X-Forwarded-For (other proxies) и Custom…. Своё значение не может быть пустым. Если заголовка в запросе нет, у auth нет IP, по которому можно считать лимит.
Submission Limits
Submission Limits ограничивают повторные попытки. В режиме чтения они показаны плашками вроде 5 per 15 min.
| Поле | Значение |
|---|---|
| Ban Duration (seconds) | Сколько пользователь заблокирован после превышения самого длинного окна. |
| OTP Request, OTP Submit, Password Submit, Passkey Assertion | В каждой категории одно или несколько окон: Max Attempts за Window (sec). |
Блокировку запускает только самое длинное окно категории. Более короткие окна отвечают немедленным ограничением частоты. + Add Window добавляет строку; оба числа не меньше 1. Значения по умолчанию для тенанта, созданного в консоли:
| Категория | Окна | Длительность блокировки |
|---|---|---|
| OTP Request | 2 за 60 s, 5 за 3600 s | 1800 s для всех категорий |
| OTP Submit | 3 за 120 s, 5 за 3600 s | |
| Password Submit | 5 за 900 s, 10 за 3600 s | |
| Passkey Assertion | 5 за 300 s, 10 за 3600 s |
Категория без единого окна не ограничивается вообще. Если у тенанта в auth нет строки настроек, применяются значения из таблицы. Пользователя, попавшего под лимит, можно освободить кнопкой Reset Limits на его карточке, см. Пользователь.
Passkey (WebAuthn)
| Поле | За что отвечает | По умолчанию |
|---|---|---|
| Relying Party ID | Домен, к которому привязаны passkey, например example.com. Обязательное. | Домен идентификации, заданный при bootstrap; пусто, если не задан. |
| Relying Party Name | Имя, которое пользователь видит в запросе passkey. Обязательное. | Versola |
| User Verification | Должен ли аутентификатор проверять пользователя (PIN, биометрия): required, preferred или discouraged. | preferred |
| Allowed Origins | Полные origin, которым разрешено использовать эти passkey, например https://example.com. Нужен хотя бы один. | Origin, заданные при bootstrap; пусто, если не заданы. |
Пока relying party ID, имя или список origin пусты, консоль не даёт сохранить форму. Passkey, зарегистрированный для одного relying party ID, не работает под другим, поэтому на работающей системе Relying Party ID меняйте осторожно.
Mutual TLS
Флажок Mutual TLS — This tenant’s reverse proxy terminates mutual TLS — сообщает auth, что прокси перед этим тенантом запрашивает клиентский сертификат и передаёт его в заголовке. Когда флажок включён, выберите, где приходит сертификат:
| Поле | Значение |
|---|---|
| Certificate Header | Заголовок, который ставит прокси. Пресеты: ssl-client-cert (nginx / ingress-nginx, PEM в URL-кодировании) и X-Forwarded-Tls-Client-Cert (Traefik, DER в Base64). Custom… принимает любое имя заголовка. |
| Encoding (только для своего заголовка) | URL-encoded PEM (urlEncodedPem) или Base64-encoded DER (base64Der). |
Для этого заголовка нет стандарта, поэтому оба значения должны точно совпадать с настройкой вашего прокси. Заголовок и кодировка сохраняются вместе; при выключенном флажке очищаются оба, а в режиме чтения блока mTLS Certificate Header нет. По умолчанию выключено.
Warning: Central откажется регистрировать клиента с mTLS-субъектом, пока у тенанта не задан mTLS Certificate Header. Ошибка:
mtlsAuth needs the client's tenant to set mtlsCertificateHeader - without it no certificate ever reaches auth for this client. Это относится к Web app, созданному в мастере (сертификат выдаётedge, а Central записывает субъект), и к любому клиенту, которого переключили на credential mTLS. Mobile or desktop app заedgeисключён: он обращается кauthна отдельном mTLS-слушателе, который читает сертификат из рукопожатия, и заголовок не нужен. Включите Mutual TLS и сохраните, прежде чем создавать такого клиента. См. Клиент и Токены с привязкой к отправителю.
Token Signing Key
Token Signing Key выбирает ключ JWKS, которым подписываются access-токены, ID-токены и logout-токены этого тенанта. В списке только ключи, для которых Central хранит закрытую часть, в виде kid · algorithm. Ключи, опубликованные только для проверки, в списке не появляются. Ключи генерируются на экране Well Known.
| Вариант | Результат |
|---|---|
| Ключ из списка | auth подписывает этим ключом. Central проверяет ключ при сохранении. |
| Auth service’s configured key | Настройка пуста. auth подписывает закрытым ключом из собственной конфигурации jwt.private-key, с тем алгоритмом, который у этого ключа есть. |
Новый тенант получает предпочтительный из доступных для подписи ключей: сначала PS256, потом ES256, при равенстве — с наибольшим kid. Если такого ключа нет, тенант работает на настроенном ключе. Ключи RS256 в списке только у тенанта с профилем безопасности Standard. На тенанте FAPI 2.0 Central их отклоняет (Key '<kid>' signs RS256 ... Select a PS256 or ES256 key instead). Профиль фиксируется при создании тенанта, см. Профили безопасности. Ещё отказы бывают для неизвестного kid и для ключа «только для проверки».
Когда вы переводите тенант на только что созданный ключ, auth начинает подписывать им лишь после синхронизации. До этого он продолжает подписывать прежним ключом, так что выпуск токенов не прерывается.
Client Assertions
Maximum Lifetime (seconds) ограничивает, насколько далеко в будущем client assertion для private_key_jwt может поставить exp (RFC 7523). auth помнит jti каждого assertion до его истечения, поэтому больший срок стоит места в хранилище, а меньший отклоняет клиентов, которые выпускают долгоживущие assertion.
| По умолчанию | Диапазон |
|---|---|
300 s (5 мин) | От 30 до 900. Консоль и Central отклоняют значение вне диапазона. |
DPoP
Require a DPoP nonce требует, чтобы каждое DPoP-доказательство от клиентов этого тенанта к /token и /userinfo содержало nonce, выданный сервером (RFC 9449, раздел 8). На запрос без nonce сервер отвечает use_dpop_nonce и свежим nonce в заголовке DPoP-Nonce, и клиент должен повторить запрос. По умолчанию выключено (Not required).
Включайте, только когда все DPoP-клиенты тенанта умеют повторять запрос после use_dpop_nonce: клиент без этого перестанет получать и обновлять токены. Клиенты без DPoP не затрагиваются. Выключение действует сразу и ничего не ломает. Настройка относится только к собственным endpoint auth; вызовы через edge подчиняются собственной настройке DPoP Nonce этого edge на экране Edges. См. Токены с привязкой к отправителю.
ACR Vocabulary
ACR Vocabulary сопоставляет имена ACR факторам аутентификации, которые они требуют. Клиент запрашивает ACR параметром acr_values. В каждой строке — имя ACR (например, company_mfa) и флажки факторов otp, password и passkey. Строки без имени или без факторов при сохранении отбрасываются. По умолчанию записей нет. Те же имена доступны как варианты Step-up ACR у ресурсов, см. Ресурс.
Post-Logout Redirect URIs
Post-Logout Redirect URIs — список адресов, на которые /logout может отправить пользователя после выхода. Relying party должна передать один из них символ в символ как post_logout_redirect_uri (OpenID logout). Каждая запись проходит ту же проверку, что и redirect URI клиента; отклонённая запись блокирует сохранение, а в ошибке указано, какая именно. По умолчанию пусто.
Authorization Details
Здесь регистрируются типы authorization_details по RFC 9396, которые могут запрашивать клиенты этого тенанта. Create Type открывает форму; ✎ меняет тип, ✕ удаляет.
| Поле | Правила |
|---|---|
| Type | Значение, которое клиенты передают в члене type. Первая буква строчная, дальше строчные буквы, цифры и подчёркивания (payment_initiation). |
| Description | Обязательное. Показывается в списке. |
| JSON Schema | Обязательное. JSON Schema 2020-12. Объекты этого типа отклоняются, если не проходят схему; unevaluatedProperties: false отклоняет неизвестные члены. Central отклоняет схему, которая сама не является корректной JSON Schema. |
Форма заполнена примером схемы: она требует type и допускает locations и actions как массивы строк. Central добавляет каждый тип в authorization_details_types_supported метаданных сервера и убирает его при удалении.

Что дальше
- System Settings — политика паролей и логотип на странице входа
- Well Known — генерация и публикация ключей подписи
- Профили безопасности и Токены с привязкой к отправителю