Страница Security с заголовком Sign-in and security хранит настройки тенанта, которые auth читает при входе пользователя и выпуске токенов. Сначала выберите тенант в боковой панели: все настройки на странице относятся к нему. Тексты одноразовых кодов лежат на странице OTP templates, типы authorization_details — на странице Authorization details, а политика паролей, которая действует на все развертывание, — в System settings.
Перед началом
| Что нужно | Разрешение |
|---|---|
| Открыть страницу | security:read |
| Менять карточки | security:manage |
Без security:manage страница доступна только для чтения: кнопок Edit нет.
Центральный сервис хранит настройки, а auth загружает их через синхронизацию конфигурации, поэтому сохраненное изменение доходит до auth после очередного обновления, а не мгновенно. Все, что описано на этой странице, действует в auth; edge эти настройки не читает. Тенант, созданный в консоли, получает значения по умолчанию из таблиц ниже.
Как устроена страница
Страница — колонка карточек. Каждая карточка показывает одну группу настроек и имеет свою кнопку Edit. Рейка слева с заголовком On this page переходит к нужной карточке; при ширине меньше 1200 px она превращается в выпадающий список. В заголовке два бейджа: ID тенанта и его профиль безопасности (FAPI 2.0 или Standard).
| Заголовок рейки | Карточки |
|---|---|
| Sign-in | Sign-in methods, One-time codes, Passkeys (WebAuthn), Registration, Step-up (ACR vocabulary), Branding |
| Sessions & tokens | Sessions, Tokens & keys, Logout |
| Protection | Submission limits и карточка Security profile только для чтения |

Edit открывает группу на отдельной странице с заголовком вроде Edit sessions и кнопками Cancel и Save sessions внизу. Сохранение отправляет только настройки этой группы, поэтому оно не перезаписывает то, что другой администратор тем временем изменил в другой группе. Двое администраторов, правящих одну и ту же группу, по-прежнему перезаписывают друг друга: побеждает последнее сохранение. Первое сохранение для тенанта, у которого еще нет настроек, создает всю запись со значениями по умолчанию. Если выйти со страницы редактирования с несохраненными правками, консоль попросит подтверждение.
У тенанта без настроек страница показывает No security settings yet и кнопку Set up settings, которая открывает Passkeys (WebAuthn). Настройки passkey нужны, чтобы сохранить любую другую карточку, поэтому сначала задайте их.
Sign-in methods
Карточка перечисляет идентификаторы, по которым пользователь может войти, и заголовок с IP клиента.

Phone numbers
Каждая строка — одна страна:
| Колонка | Что значит | Правило |
|---|---|---|
| Region | Код страны по ISO 3166-1 alpha-2, например KZ. | Две заглавные буквы, уникален в списке. |
| Dial code | Телефонный код страны, например +7. | + и от одной до четырех цифр. |
| Length | Сколько цифр идет после кода. | От 4 до 14; код и номер вместе — не больше 15 цифр. |
| Regex | Регулярное выражение Java, которому цифры после кода должны соответствовать целиком. | Должно компилироваться. Пример: 7\d{9}. |
| Sign-up | Может ли номер этой страны сам создать аккаунт. | Флажок. У региона, добавленного вручную, выключен; у региона из пресета включен. |
По умолчанию список пуст: на вход принимается любой номер E.164, а по телефону никто не регистрируется. Регионы могут делить один код: у KZ и RU оба +7, а regex — 7\d{9} и 9\d{9}. Номер принимается, если его длина и regex подходят хотя бы одному региону. Тенант с обоими регионами принимает номера +77… и +79…, только с RU — +79…, только с KZ — +77…. Кнопки ↑ и ↓ двигают строку; порядок строк — порядок, в котором форма входа показывает коды. В режиме чтения каждый регион показан тегом вроде KZ +7 · 10 digits, а регионы, разрешающие регистрацию, перечислены в одном теге sign-up:.
+ Add region добавляет пустую строку. Add from presets открывает Add countries — список готовых стран (код, телефонный код, длина и шаблон номера). Отметьте нужные, найдите их по названию, коду или телефонному коду и подтвердите Add selected: они добавятся в конец списка с включенным Sign-up, а уже перечисленная страна пропускается. Чтобы закрыть регистрацию для страны, снимите Sign-up в ее строке. Шаблоны пресетов намеренно свободные, кроме KZ и RU; чтобы сузить шаблон, отредактируйте строку. auth проверяет, что номер настоящий для своей страны.
Номера телефонов хранятся и сравниваются в каноническом виде E.164, и список проверяется именно по нему: +787011234567 (с национальным префиксом «8» после кода страны) до проверки превращается в +77011234567. Тот же список действует на login_hint с номером телефона. Central отвечает 400 на сохранение, в котором список нарушает правило выше.
На форме входа список определяет, что видит пользователь:
- Регионов нет: обычное поле телефона, номер вводится с
+. - Один код (один регион или несколько с общим кодом): код показан перед полем номера и не меняется.
- Несколько кодов: выбор из уникальных кодов в порядке списка. Начиная с шести кодов в выборе есть поиск по названию страны, коду ISO и телефонному коду. Если вставить номер, начинающийся с
+, код выбирается сам.
Форма проверяет номер до отправки, и auth проверяет его еще раз, поэтому запрос в обход формы тоже отклоняется.
Адреса email принимаются на вход у любого тенанта; карточка лишь показывает режим регистрации, который задается в Registration.
Client IP header
Header — имя HTTP-заголовка, в котором ваш reverse proxy передает настоящий IP клиента. auth использует его для ограничения по IP и берет первое значение, если в заголовке список через запятую. По умолчанию X-Real-IP. В списке есть X-Real-IP (nginx), X-Forwarded-For (other proxies) и Custom…. Свое значение не может быть пустым. Если заголовка в запросе нет, у auth нет IP, по которому можно считать лимит.
One-time codes
Карточка показывает длину генерируемого кода и сколько пользователь ждет, прежде чем запросить новый. Текст сообщения лежит на странице OTP templates.

| Поле | За что отвечает | По умолчанию | Диапазон |
|---|---|---|---|
| Code length | Число цифр в одноразовом коде. | 6 | От 4 до 10. |
| Resend after | Сколько пользователь ждет, прежде чем запросить новый код. | 1 min (60 s) | Не меньше одной секунды. |
Длительности на этой странице вводятся числом и единицей: seconds, minutes, hours или days. В режиме чтения карточка показывает их кратко, например 15m или 1d; полное значение в секундах видно во всплывающей подсказке.
Passkeys (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. Нужен хотя бы один, каждый — абсолютный URL http или https. | Origin, заданные при bootstrap; пусто, если не заданы. |
Пока relying party ID, имя или список origin пусты, консоль не дает сохранить группу. Passkey, зарегистрированный для одного relying party ID, не работает под другим, поэтому на работающей системе Relying party ID меняйте осторожно.
Registration
Карточка хранит правило для email и роли нового аккаунта. Новый тенант начинает с Closed для email и с ролью user. Регистрация решается для всего тенанта; у клиента для нее нет переключателя. Номер телефона регистрируется, когда у его региона включен Sign-up, а email — по режиму ниже, через какой бы клиент ни пришел пользователь. Тенант без регионов пускает любой номер на вход, но не регистрирует ни один номер телефона.

| Поле | Что задает | По умолчанию | Правило |
|---|---|---|---|
| Email registration | Кто может создать аккаунт с email. Closed: никто, существующие аккаунты входят как раньше. Open: любой адрес, кроме перечисленных доменов. Allowlist: только перечисленные домены. | Closed | Один из трех вариантов. |
| Blocked domains (Open) или Allowed domains (Allowlist) | Список доменов, по одному в строке. example.com совпадает только с этим доменом; *.example.com — с его поддоменами, но не с example.com. Юникодные имена хранятся в punycode. | пусто | До 500 записей, без повторов. В Allowlist с пустым списком не регистрируется никто. В Closed список игнорируется. |
| Block addresses with + = # (sub-addresses) | Отклонять локальную часть вроде user+tag@ — дешевый способ получить много адресов для одного ящика. При выключенном флажке a+tag@example.com — тот же аккаунт, что a@example.com. | выключено | |
| Default roles | Роли, которые получает каждый самостоятельно зарегистрированный аккаунт, каким бы credential он ни регистрировался. | user | Минимум одна, отмечаются из ролей тенанта. Пока открыта хоть какая-то регистрация, Central отклонит роль, которой нет в тенанте. |
Какие клиенты предлагают регистрацию, определяет их вход. Клиент, у которого первый экран просит email или телефон и не просит рядом логин или пароль, предлагает регистрацию, когда тенант разрешает этот credential. Новый пользователь подтверждает адрес одноразовым кодом и, если вход клиента требует пароль, задает его. Адрес, который тенант не разрешает регистрировать, или уже зарегистрированный идет по обычному пути входа и ничего не узнает об аккаунте.
Роль из Default roles удалить нельзя. Central отвечает 409, а консоль делает действие удаления этой роли неактивным, пока вы не уберете ее из списка. В режиме чтения роли по умолчанию показаны ссылками на роль.
Warning: Регионы заменили прежний список префиксов телефонов (
allowedPrefixes), а сохраненные префиксы не переносятся: префикс не задает ни длину, ни шаблон. Тенант, у которого были префиксы, принимает любой номер на вход и не регистрирует ни один номер телефона, пока вы не добавите регионы с включенным Sign-up. Переключатель саморегистрации у клиента тоже убран, а его содержимое при миграции настроек переехало сюда: тенант, у которого был клиент с регистрацией по email, начинает с Open (ничего не блокируется), остальные тенанты — с Closed, а Default roles — это роли, которые выдавали эти клиенты. Регистрация теперь задается для тенанта, поэтому каждый клиент такого тенанта, который входит по email, теперь дает любому зарегистрироваться. Проверьте режим до обновления.
Step-up (ACR vocabulary)
Карточка сопоставляет имена ACR факторам аутентификации, которые они требуют. Клиент запрашивает ACR параметром acr_values. В каждой строке — имя ACR (например, company_mfa) и флажки факторов otp, password и passkey. Нужны имя, которое не повторяется, и хотя бы один фактор, иначе консоль не даст сохранить. По умолчанию записей нет. Те же имена доступны как варианты Step-up ACR у ресурсов, см. Ресурс.

Branding
Branding хранит логотип, который показывается без подложки над карточкой входа клиентов этого тенанта, и favicon его страниц входа: вход, одноразовый код, пароль, согласие и экраны ошибок. Это пара файлов, по одному на каждую цветовую схему:
| Поле | Рисунок | Когда показывается |
|---|---|---|
| Logo for the light scheme (dark artwork) | Темный рисунок | Страница в светлой цветовой схеме. |
| Logo for the dark scheme (light artwork) | Светлый рисунок | Страница в темной цветовой схеме. |
Карточка показывает каждый файл на светлой и на темной подложке. Страница следует выбору посетителя Auto, Light или Dark, поэтому логотип переключается вместе с ней. Если пары нет, экраны показывают словесный знак Versola; так же — если не загрузился любой из двух файлов. Favicon следует схеме самого браузера: светлый файл в светлом браузере, темный — в темном.


| Правило | Подробности |
|---|---|
| Оба или ни одного | Только один файл не принимается: один файл на обе схемы пропал бы на странице другой. Консоль пишет The logo needs both a light and a dark file, or neither.; Central отвечает 400 с текстом logoLight and logoDark must be set or cleared together. |
| URL | Абсолютный URL http или https с хостом. Консоль обрезает пробелы по краям; Central отклоняет все остальное с текстом logoLight and logoDark must be absolute HTTP(S) URLs. |
| Формат | Рекомендуется SVG; PNG и WebP тоже подходят. Файл показывается как картинка, поэтому скрипты внутри SVG не выполняются. |
| Текст в SVG | Переведите текст в контуры. Шрифты внутри картинки не загружаются, поэтому живой текст заменится шрифтом по умолчанию. |
| Без логотипа | Очистите оба поля. Страницы, не принадлежащие известному клиенту (страница выхода, открытая без client_id), тенанта не имеют и показывают словесный знак Versola. |
По умолчанию пусто. Развертывание, обновленное с релиза с одним общим логотипом, начинает с этого файла в обоих полях каждого тенанта; замените его настоящей парой.
Sessions

| Поле | За что отвечает | По умолчанию | Диапазон |
|---|---|---|---|
| Sign-in conversation | Сколько живет незавершенный вход (цепочка challenge для одного запроса авторизации). | 15 min (900 s) | Не меньше 1 s. |
| SSO session | Сколько действует cookie SSO-сессии после аутентификации, даже если пользователь активен. | 1 day | Не меньше 1 s. |
| Idle timeout | Online-сессии (без offline_access) истекают после такого простоя. Таймер сдвигается при каждой тихой повторной аутентификации. Включается флажком End the session when it is not used for a while. | выключено | Если включено — не меньше 1 s и меньше срока SSO-сессии. |
| Remembered device | Сколько запоминается знакомое устройство (user agent), прежде чем его нужно проверить заново. Показывается в записи пользователя как Devices. | 180 days | Не меньше 1 s. |
У тенанта с профилем FAPI 2.0 на странице есть еще заблокированная заметка Rule set by the profile: access-токены привязаны к отправителю (DPoP или mTLS).
Tokens & keys

Signing key
Signing key выбирает ключ JWKS, которым подписываются access-токены, ID-токены и logout-токены этого тенанта. В списке только ключи, для которых Central хранит закрытую часть, в виде kid · algorithm. Ключи, опубликованные только для проверки, в списке не появляются. Ключи генерируются на странице Keys & metadata; карточка в режиме чтения ссылается на выбранный ключ там.
| Вариант | Результат |
|---|---|
| Ключ из списка | auth подписывает этим ключом. Central проверяет ключ при сохранении. |
| Auth service’s configured key | Настройка пуста. auth подписывает закрытым ключом из собственной конфигурации jwt.private-key, с тем алгоритмом, который у этого ключа есть (RSA или EC; свежесгенерированное развертывание хранит ключ EC P-256, то есть ES256). |
Новый тенант получает предпочтительный из доступных для подписи ключей: сначала PS256, потом ES256, при равенстве — с наибольшим kid. Если такого ключа нет, тенант работает на настроенном ключе. Ключи RS256 в списке только у тенанта с профилем безопасности Standard. На тенанте FAPI 2.0 Central их отклоняет (Key '<kid>' signs RS256 ... Select a PS256 or ES256 key instead). Профиль фиксируется при создании тенанта, см. Профили безопасности. Еще отказы бывают для неизвестного kid и для ключа «только для проверки».
Чтобы перевести развертывание, подписывающее RSA-ключом, на ES256, сгенерируйте ключ ES256 и выберите его здесь; шаги — на странице Keys & metadata.
Когда вы переводите тенант на только что созданный ключ, auth начинает подписывать им лишь после синхронизации. До этого он продолжает подписывать прежним ключом, так что выпуск токенов не прерывается.
Client assertion lifetime
Client assertion lifetime ограничивает, насколько далеко в будущем client assertion для private_key_jwt может поставить exp (RFC 7523). auth помнит jti каждого assertion до его истечения, поэтому больший срок стоит места в хранилище, а меньший отклоняет клиентов, которые выпускают долгоживущие assertion.
| По умолчанию | Диапазон |
|---|---|
5 min (300 s) | От 30 s до 15 min. Консоль и Central отклоняют значение вне диапазона. |
DPoP
Require a DPoP nonce on every proof требует, чтобы каждое DPoP-доказательство от клиентов этого тенанта к /token и /userinfo содержало nonce, выданный сервером (RFC 9449, раздел 8). На запрос без nonce сервер отвечает use_dpop_nonce и свежим nonce в заголовке DPoP-Nonce, и клиент должен повторить запрос. Карточка в режиме чтения пишет Required on every proof или Not required. По умолчанию выключено.
Включайте, только когда все DPoP-клиенты тенанта умеют повторять запрос после use_dpop_nonce: клиент без этого перестанет получать и обновлять токены. Клиенты без DPoP не затрагиваются. Выключение действует сразу и ничего не ломает. Настройка относится только к собственным endpoint auth; вызовы через edge подчиняются собственной настройке DPoP Nonce этого edge на экране Edges. См. Токены с привязкой к отправителю.
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… показывает Header name и Encoding. |
| Encoding (только для своего заголовка) | URL-encoded PEM (urlEncodedPem) или Base64-encoded DER (base64Der). |
Для этого заголовка нет стандарта, поэтому оба значения должны точно совпадать с настройкой вашего прокси. Заголовок и кодировка сохраняются вместе; при выключенном флажке очищаются оба, а карточка в режиме чтения пишет Not terminated by the reverse proxy. По умолчанию выключено.
Warning: Central откажется регистрировать клиента с mTLS-субъектом, пока у тенанта не задан заголовок сертификата. Ошибка:
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 и сохраните, прежде чем создавать такого клиента. См. Клиент и Токены с привязкой к отправителю.
Logout
Post-logout redirect URIs — список адресов, на которые /logout может отправить пользователя после выхода. Relying party должна передать один из них символ в символ как post_logout_redirect_uri (OpenID logout). Каждая запись проходит ту же проверку, что и redirect URI клиента; отклоненная запись блокирует сохранение, а в ошибке указано, какая именно. По умолчанию пусто, поэтому ни одна relying party не может его запросить.

Submission limits
Submission limits ограничивают повторные попытки. В режиме чтения каждая категория показана плашками вроде 5 per 15m или No limit, плюс длительность блокировки.

| Поле | Значение |
|---|---|
| Ban duration | Сколько пользователь заблокирован после превышения самого длинного окна. 0 — не блокировать никого. |
| OTP request, OTP submit, Password submit, Passkey assertion | В каждой категории одно или несколько окон: максимум попыток за длину окна. |
Блокировку запускает только самое длинное окно категории. Более короткие окна отвечают немедленным ограничением частоты. Оба числа окна не меньше 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 на его карточке, см. Пользователь.
Security profile
Последняя карточка, Security profile, только для чтения и помечена Fixed: профиль выбирается при создании тенанта. Она сообщает, что тенант FAPI 2.0 (для каждого клиента обязательны PAR, PKCE S256 и токены с привязкой к отправителю) или Standard (клиенты сами выбирают защиту). См. Тенант и Профили безопасности.
Что дальше
- OTP templates — тексты одноразовых кодов и временных паролей
- Authorization details — регистрация типов
authorization_details - Keys & metadata — генерация и публикация ключей подписи
- Профили безопасности и Токены с привязкой к отправителю