Аутентификация приложений
Защита приложений с помощью SSO-аутентификации через Traefik и OIDC-провайдер. Только для Enterprise.
Аутентификация приложений доступна только на плане Enterprise. Перед развёртыванием необходимо настроить SSO-провайдер с конфигурацией OIDC.
Аутентификация приложений развёртывает прокси forward-auth перед Traefik-роутером. Каждый запрос к защищённому домену проходит через прокси: неаутентифицированные пользователи перенаправляются на страницу входа вашего OIDC-провайдера, аутентифицированные сессии передаются в приложение.
Forward auth применяется только к доменам, маршрутизируемым через Docker/Swarm (приложения и compose-стеки); на Kubernetes ingress это не влияет — переключатель не имеет эффекта для приложений, развёрнутых на Kubernetes.
Как это работает
- На целевом сервере разворачивается лёгкий контейнер auth-прокси.
- Middleware
forwardAuthTraefik добавляется к каждому домену, который нужно защитить. - Неаутентифицированные запросы перенаправляются к OIDC-провайдеру.
- После входа провайдер выполняет обратный редирект через домен аутентификации, а прокси устанавливает cookie сессии.
- Последующие запросы содержат cookie и передаются напрямую в приложение.
Предварительные требования
- План Enterprise с включённой функцией SSO
- SSO-провайдер с настроенным OIDC (SAML-провайдеры не поддерживаются для аутентификации приложений)
- Домен для самого прокси (например,
auth.example.com) - На облачном плане: необходимо выбрать удалённый сервер; локальное развёртывание недоступно
- Защищаемый домен должен иметь тот же базовый домен, что и домен аутентификации — cookie сессии устанавливается на базовый домен домена аутентификации, поэтому домен аутентификации
auth.example.comможет защищать только домены в рамкахexample.com(например,app.example.com, но неapp.other.com)
Развёртывание прокси
- Перейдите в Settings → SSO → Application Authentication.
- Выберите целевой Сервер (пользователи облачного плана должны выбрать удалённый сервер).
- Выберите SSO-провайдер — в списке отображаются только OIDC-провайдеры.
- Укажите Auth Domain — это имя хоста, которое прокси использует для своего колбэка (
auth.example.com). Должно быть корректным именем хоста и указывать на тот же сервер. Настройте DNS-записьAэтого домена на IP-адрес сервера — подсказка с адресом отображается на странице. - Нажмите Deploy proxy.
Прокси считывает OIDC issuer, client ID и client secret непосредственно из сохранённого SSO-провайдера — они никогда не отображаются в интерфейсе. Под капотом Skitflow разворачивает oauth2-proxy как сервис Docker Swarm (skitflow-oauth2-proxy-<server>), закреплённый за manager-узлом, вместе с Traefik-роутером websecure и сертификатом Let's Encrypt для домена аутентификации.
Защита домена
После развёртывания откройте любой домен приложения или compose-стека и включите переключатель Protect with SSO. Для этого требуется развёрнутый прокси на сервере приложения и домен с тем же базовым доменом, что и у прокси (см. предварительные требования). Передеплойте приложение, чтобы применить изменение. Для приложений конфигурация применяется немедленно; для compose-стеков — при следующем деплое.
Проверка статуса прокси
Статус прокси отображается на странице настроек Application Authentication. Его также можно запросить напрямую:
GET /api/trpc/forwardAuth.status?input={"serverId":"<server-id>"}Возвращает состояние реплик сервиса Swarm:
{ "running": true, "replicas": 1 }Удаление прокси
- Перейдите в Settings → SSO → Application Authentication.
- Нажмите Remove.
Перед удалением сервиса прокси Skitflow автоматически снимает флаг forwardAuthEnabled с каждого защищённого им домена, чтобы ни одно приложение не осталось указывающим на удалённую точку аутентификации. Для приложений конфигурация Traefik перерисовывается немедленно, поэтому middleware удаляется сразу. Домены compose-стеков теряют middleware при следующем деплое.
Kubernetes-приложения не участвуют в этой очистке: флаг всё равно снимается в базе данных, но в пути Kubernetes/Helm ingress нет рендеринга forward-auth, поэтому переключатель изначально не оказывал на них никакого эффекта.
Справочник API
Все эндпоинты требуют токен сессии администратора.
| Метод | Путь | Описание |
|---|---|---|
GET | /api/trpc/forwardAuth.getServerConfig | Получить текущие настройки и статус прокси |
POST | /api/trpc/forwardAuth.deploy | Развернуть (или повторно развернуть) прокси |
POST | /api/trpc/forwardAuth.remove | Удалить прокси и снять защиту со всех доменов |
GET | /api/trpc/forwardAuth.status | Получить актуальный статус контейнера прокси |
Тело запроса deploy
{
"serverId": "<server-id-or-null>",
"ssoProviderId": "<oidc-provider-id>",
"authDomain": "auth.example.com"
}Целевой объект (status / getServerConfig / remove)
{
"serverId": "<server-id-or-null>"
}Передайте null в serverId для указания на локальный сервер платформы (только для self-hosted).