Русский
OIDC / Корпоративный SSO
OIDC позволяет сотрудникам входить в trip2g через корпоративный аккаунт — один клик через корпоративный IdP, без отдельного пароля в trip2g. Основной IdP в фокусе — Authentik, но подойдёт любой провайдер со стандартным OpenID Connect.
Как это работает
OIDC не даёт доступ автоматически. Доступ зависит от того, совпадает ли email из IdP с email зарегистрированного пользователя в trip2g — если не включён автопровижининг.
Два шага в строгом порядке:
- Пользователь нажимает «Войти через SSO» — браузер уходит на IdP, где человек проходит аутентификацию; IdP возвращает подтверждённый email.
- trip2g проверяет email — если он совпадает с зарегистрированным пользователем, сессия создаётся; если нет, доступ закрыт (или пользователь создаётся автоматически при включённом автопровижининге).
sequenceDiagram
participant User as Пользователь
participant trip2g as Trip2G
participant IdP as Корпоративный IdP (Authentik)
User->>trip2g: «Войти через SSO»
trip2g->>IdP: Редирект (Authorization Code flow)
IdP-->>User: Аутентификация (логин + пароль / MFA)
IdP-->>trip2g: Callback с подтверждённым email
alt Email совпадает с зарегистрированным пользователем
trip2g->>User: Сессия создана, доступ разрешён
else Пользователь не найден (автопровижининг выключен)
trip2g->>User: Доступ запрещён (user_not_found)
else Автопровижининг включён
trip2g->>trip2g: Создать пользователя по email
trip2g->>User: Сессия создана, доступ разрешён
end
После активации OIDC-провайдера кнопка «Войти через SSO» появляется на странице входа. Callback-адрес, по которому IdP возвращает пользователя:
https://ваш-домен.com/_system/auth/oidc/callback
Зарегистрируйте этот адрес в IdP точно в таком виде.
Настройка IdP (Authentik)
Эти шаги выполняет администратор Authentik один раз.
Шаг 1. Создайте Provider
- В Authentik перейдите в Applications → Providers → Create.
- Выберите OAuth2/OpenID Provider.
- Заполните форму:
- Name: например,
trip2g - Authorization flow: стандартный flow вашей организации
- Client type: Confidential
- Redirect URIs: добавьте точно
https://ваш-домен.com/_system/auth/oidc/callback
- Name: например,
- Сохраните. Authentik создаст Client ID и Client Secret — скопируйте оба значения.
Шаг 2. Создайте Application
- Перейдите в Applications → Applications → Create.
- Свяжите Application с созданным Provider.
- Slug приложения войдёт в URL issuer'а:
Примечание: закрывающий слеш обязателен — Authentik включает его в claimhttps://authentik.company/application/o/<slug>/iss.
Шаг 3. (Необязательно) Добавьте группы в токен
По умолчанию Authentik не включает группы в токен. Чтобы добавить claim groups:
- Перейдите в Customization → Property Mappings → Create → OAuth2 Scope Mapping.
- Укажите Scope name:
groups. - Добавьте выражение:
return [group.name for group in request.user.ak_groups.all()] - Привяжите это mapping к Provider в разделе Advanced protocol settings → Scopes.
- При настройке OIDC-провайдера в trip2g добавьте
groupsв поле Scopes.
Настройка OIDC в trip2g
Провайдер можно добавить двумя способами в зависимости от типа деплоя.
Способ А: Через администраторскую панель (runtime)
Подходит для стандартных деплоев, где администратор управляет ключами через интерфейс.
-
Войдите в административную панель trip2g.
-
Перейдите в Admin → OIDC и создайте провайдер, заполнив поля:
Поле Пример значения Name AuthentikIssuer https://authentik.company/application/o/trip2g/Client ID из Authentik Client Secret из Authentik Scopes openid email profile(добавьтеgroups, если настроили) -
Сохраните, затем сделайте провайдер активным.
После активации на странице входа появится кнопка «Войти через SSO».
Способ Б: Через переменные окружения (self-hosted, zero-touch)
Подходит для корпоративных деплоев, где SSO-конфигурацию нужно зафиксировать на уровне инфраструктуры и защитить от изменения через панель.
Установите переменные окружения перед запуском trip2g:
OIDC_ISSUER="https://authentik.company/application/o/trip2g/"
OIDC_CLIENT_ID="<client_id из Authentik>"
OIDC_CLIENT_SECRET="<client_secret из Authentik>"
Дополнительные переменные:
OIDC_AUTO_PROVISION="true" # создавать пользователей при первом входе
OIDC_ALLOWED_EMAIL_DOMAIN="company.com" # пускать только с этим доменом email
OIDC_REQUIRED_GROUP="trip2g-users" # пускать только членов этой группы
Пока эти переменные заданы, trip2g использует провайдер, управляемый через env, собранный прямо из них, — он всегда имеет приоритет над тем, что настроено в панели. Этот провайдер заблокирован: его нельзя изменить или удалить из панели, такие попытки просто игнорируются. Чтобы отключить его, уберите переменные и перезапустите.
Политика доступа
Политика определяет, кого пускать после того, как IdP подтвердил личность.
| Настройка | Поведение |
|---|---|
auto_provision выключен (по умолчанию) |
Email из IdP должен совпадать с email существующего пользователя trip2g. Незнакомый email — доступ закрыт. Аналогично поведению Google/GitHub OAuth. |
auto_provision включён |
При первом входе trip2g создаёт нового пользователя по подтверждённому email. Провижининг выполняется только при email_verified: true. |
allowed_email_domain |
Каждый вход (существующего или нового пользователя) блокируется, если домен email не совпадает с указанным. |
required_group |
Каждый вход блокируется, если в токене нет нужной группы. Требует scope mapping groups в Authentik. |
Ограничения по домену и группам применяются при каждом входе, не только при первом.
Безопасность
При Способе А Client Secret хранится в базе в зашифрованном виде — даже если резервная копия попадёт в чужие руки, без ключа шифрования секрет недоступен. При Способе Б секрет живёт только в переменных окружения и никогда не записывается в базу.
Провайдер, управляемый через env (Способ Б), нельзя случайно изменить или деактивировать через административную панель.
Связанные статьи
- ru/user/oauth — OAuth-авторизация через Google и GitHub
- ru/user/user_management — добавление пользователей и назначение ролей
- ru/user/monetization — разграничение публичных и платных материалов
- ru/user/advanced — свой домен, SEO и другие настройки хостинга