Self-hosted Veriqa говорит по HTTP и ждёт, что TLS терминируется на прокси перед ней. Эта страница
перечисляет, что этот прокси должен пропускать. Доверие к прокси на стороне Veriqa — секция
ForwardedHeaders — описано в
self-hosted, шаг 6.
Дайте Veriqa собственное имя хоста
Самая простая и рекомендуемая раскладка — отдельное имя хоста, auth.your-domain.com, все запросы
которого уходят в Veriqa. Ничего не нужно перечислять, ничто не пересекается с вашим приложением,
а путь, добавленный следующим релизом, заработает без правки прокси. Этот же адрес — issuer, по
которому ваши приложения проверяют токены: у инстанса один issuer, поэтому приложения на разных
доменах — например, тестовый сайт и боевой — указывают на один и тот же адрес, а не проксируют
Veriqa каждое под своим доменом.
Если вы всё же встраиваете Veriqa в имя хоста своего приложения, способов два. Пропускать все пути
из таблицы ниже: Veriqa отдаёт их от корня имени хоста, поэтому /_content/ и /hubs/ на нём
заняты. Либо оставить корень приложению и убрать всю Veriqa
под префикс пути.
Пути
/health/live, /health/ready и /health/channels нужны вашему мониторингу, публиковать их не
обязательно.
Списка из /.well-known/, /connect/, /hubs/, /api/transaction/ и /_content/ хватает для
простого входа, и он выглядит полным. Хватать перестаёт в день, когда вы запросите номер телефона
или email, включите Email-канал или переведёте бота в Webhook: эти страницы и вебхуки живут под
/auth/ и /api/channels/.
WebSocket
О том, что пользователь подтвердил вход, страница входа узнаёт через хаб /hubs/auth. Прокси
должен позволить соединению перейти на WebSocket — пробросить заголовки Upgrade и Connection и
ходить в Veriqa по HTTP/1.1 — и не должен рвать простаивающее соединение раньше, чем может длиться
вход. Когда переход не проходит, страница переключается на опрос /api/transaction/{id}/status:
вход всё равно завершается, но с задержкой.
NGINX
Когда Veriqa делит имя хоста с вашим приложением, оставьте тело блока location и повторите его
для каждого префикса таблицы вместо /:
Полная конфигурация с настройками TLS и редиректом с HTTP на HTTPS лежит в репозитории:
samples/docker-compose/nginx.conf (примеры).
Под префиксом пути
С префиксом пути каждый адрес Veriqa начинается с него —
https://app.your-domain.com/auth/veriqa/connect/token, — а корневые пути имени хоста остаются
вашему приложению. Задайте префикс хосту Veriqa и повторите его во всех публичных адресах, которые
вы настраиваете:
Veriqa:PathBase начинается с /, не оканчивается на / и может состоять из нескольких
сегментов. Пишется он обычным текстом: без ?, #, %, \, пробельных символов и без сегментов
. и ... Значение другой формы останавливает хост на старте; пустое значит корень. Префикс
действует при любом способе, которым прокси передаёт путь, — возьмите один из двух блоков:
После этого https://app.your-domain.com/auth/veriqa/.well-known/openid-configuration возвращает
issuer и все эндпоинты с префиксом. Клиент, читающий метаданные по RFC 8414, запрашивает их от
корня имени хоста, дописывая путь issuer в конец. Отобразите этот адрес:
Это отображение проверено для прокси, передающего путь как есть. У прокси, срезающего префикс, цель
— тот же адрес без /auth/veriqa; этот вариант не проверялся.
Что учесть:
- Префикс, с которого начинается путь самой Veriqa, —
/auth, /api, /connect, /hubs,
/_content, /health или путь hop-ссылок (/r по умолчанию, Veriqa:HopMode:HopPath) —
работает, только когда прокси передаёт путь как есть. За срезающим прокси такой префикс отвечает
404. /auth/veriqa к ним не относится.
- Запросы, приходящие к инстансу напрямую, идут без префикса — health-проба запрашивает
http://127.0.0.1:8080/health/live. Отличить такой запрос от запроса, срезанного прокси, Veriqa
не может и обслуживает оба, поэтому закрыть корень инстанса снаружи — дело прокси.
- Несколько инстансов. Прокси должен держать браузер на одном инстансе (привязка сессии,
ip_hash в NGINX): без неё хаб страницы входа не подключается. У Email-канала своё ограничение —
оговорка про multi-instance в настройке каналов, Email. От префикса
не зависит ни то, ни другое.
- Под префиксом проверены: вход по Email в обоих режимах с его входящим вебхуком, вебхук
мессенджера (режим
Webhook), запрос номера телефона, подтверждение
адреса почты кодом или письмом от пользователя при
доборе claims, выдача токенов и userinfo, форма добора
недостающего поля профиля и транзакция подтверждения, созданная вашим сервером. Часть про
мессенджеры проверялась только на MAX и Telegram.
Veriqa:PathBase — настройка поставляемого хоста. Когда Veriqa встроена в ваше приложение ASP.NET
Core, префикс — это UsePathBase самого приложения, и discovery его несёт.
Другие прокси
Traefik, Caddy и IIS нужны те же три вещи: все пути из таблицы, заголовки X-Forwarded-Proto и
X-Forwarded-For и переход на WebSocket. Traefik и Caddy пропускают его без настройки; в IIS должен
быть установлен компонент WebSocket Protocol. Под префиксом пути вместо путей таблицы пропускается
один префикс — см. Под префиксом пути.
Проверка
https://auth.your-domain.com/.well-known/openid-configuration возвращает https-URL на вашем
имени хоста. http-URL или invalid_request значат, что прокси не доверен —
self-hosted, шаг 6.
- На странице входа вкладка сети в браузере показывает
/hubs/auth с ответом 101 Switching Protocols.
Request Header Or Cookie Too Large — поднимите large_client_header_buffers.