Skip to main content
Вход в Veriqa обычно начинается на десктопе, а подтверждается в доверенном канале на телефоне. Чтобы пользователь понимал, что подтверждает именно свой вход (а не чужую попытку), Veriqa добавляет в сообщение подтверждения контекст инициатора — краткую сводку о том, кто и откуда запустил транзакцию.
Контекст инициатора — это подсказка для пользователя перед подтверждением, а не решение о доступе. Он не заменяет проверки безопасности: транзакция всё равно ограничена TTL, one-time использованием и rate limiting.

Что показывается

Набор полей задаётся DisplayFields. Доступные поля: По умолчанию показываются все четыре поля.

Откуда берутся данные

Снимок контекста формируется на старте транзакции (/connect/authorize) из данных запроса:
  • IP-адрес — из соединения (best-effort; учитывает forwarded-заголовки за доверенным прокси).
  • Браузер и ОС — разбором User-Agent.
  • Регион — геолокацией по IP через офлайн-базу (без обращения к онлайн-сервисам в trust-path).
Геолокация требует двух вещей, которых нет в базовой поставке: сателлитного пакета Veriqa.Core.AuthServer.MaxMind и локальной GeoIP-базы (MaxMind .mmdb или совместимой). Если пакет не подключён или база не задана — геополя остаются пустыми, остальной контекст показывается как обычно (graceful degradation). Сырой User-Agent по умолчанию не сохраняется.
Сбор включён по умолчанию. Enabled, CollectIpAddress, CollectUserAgent и CollectGeoLocation поставляются как true. Что это значит на практике — где каждое значение лежит, сколько живёт и как сбор выключить — в Безопасности и обработке данных.

Конфигурация

Секция Veriqa:InitiatorContext:
appsettings.json
  • Enabled (по умолчанию true) — глобальный включатель. При false снимок не формируется, и поведение системы не меняется.
  • CollectIpAddress / CollectUserAgent / CollectGeoLocation — что собирать (все по умолчанию true).
  • StoreRawUserAgent — хранить ли сырой User-Agent (по умолчанию false).
  • GeoIp.Provider — OfflineDatabase (офлайн .mmdb); GeoIp.DatabasePath — путь к базе.
Сами ключи GeoIp ничего не включают, пока в приложении нет провайдера, который читает базу. Он приезжает сателлитным пакетом — ядро не тащит GeoIP-библиотеку транзитивно:
Без него хост стартует как обычно, а при CollectGeoLocation: true пишет в лог старта предупреждение с кодом initiator_context_geoip_unavailable.

Настройка на уровне клиента

Показ контекста настраивается на конкретный OIDC-клиент — полями клиента в конфигурации. Значение null означает «наследовать глобальный дефолт». Приложение может только сузить набор полей верхнего уровня, но не расширить его.
appsettings.json
  • InitiatorContextEnabled — показывать ли контекст в подтверждении для этого клиента (управляет именно отображением; сбор снимка регулируется глобально).
  • InitiatorContextDisplayFields — суженный набор полей для этого клиента.

Дальше

Как работает auth-поток

Где в потоке формируется контекст инициатора.

Hardening к продакшну

Чек-лист перед выпуском в продакшн.