SSO-аутентификация
Настройка единого входа (SSO) для самостоятельно размещённого rtCloud с использованием встроенного Keycloak, внешнего провайдера OIDC или Azure Active Directory.
rtCloud поддерживает три подхода к единому входу (SSO):
| Вариант | Лучше подходит для |
|---|---|
| Встроенный Keycloak | Организаций, желающих полностью автономный SSO-сервер в комплекте с rtCloud |
| Внешний провайдер OIDC | Организаций, уже использующих поставщика идентификации (Auth0, Authentik, Okta, Supabase и т.д.) |
| Azure Active Directory | Организаций, использующих Microsoft 365 или Azure AD |
Без настроенного SSO пользователи входят с локальными учётными записями rtCloud, управляемыми через панель администратора.
Встроенный Keycloak
Развёртывание включает опциональный контейнер Keycloak, работающий рядом с rtCloud. Keycloak предварительно настроен с областью rtSurvey и готов к использованию.
Требования
- Доменное имя с HTTPS (Keycloak требует HTTPS в производственной среде)
- Не менее 4 ГБ RAM на сервере (Keycloak добавляет ~512 МБ к использованию памяти)
Настройка
1. Настройте переменные окружения в .env:
# Включить встроенный контейнер Keycloak
EMBED_KEYCLOAK=true
# URL Keycloak — используйте ваш реальный домен
KEYCLOAK_URL=https://rtcloud.example.com/auth
KC_HOSTNAME=https://rtcloud.example.com/auth
KC_HOSTNAME_STRICT=false
# Настройки области и клиента (соответствуют импортированному realm JSON)
KEYCLOAK_REALM=rtsurvey
KEYCLOAK_CLIENT_ID=rtsurvey-app
KEYCLOAK_CLIENT_SECRET=your-client-secret-here
# Учётные данные администратора Keycloak
KEYCLOAK_ADMIN_USER=admin
KEYCLOAK_ADMIN_PASSWORD=change_me_keycloak_admin_password
# База данных Keycloak (создаётся автоматически)
KEYCLOAK_DB=keycloak
KEYCLOAK_DB_USER=keycloak
KEYCLOAK_DB_PASSWORD=change_me_keycloak_db_password
# Порт Keycloak (на стороне хоста, проксируется через Nginx)
KEYCLOAK_PORT=8091
2. Запустите с профилем встроенного Keycloak:
docker compose -f docker-compose.production.yml --profile embed-keycloak up -d
3. Убедитесь, что Keycloak работает корректно:
docker compose -f docker-compose.production.yml ps
Контейнер rtcloud-keycloak должен показать Up (healthy) через 2–3 минуты.
4. Откройте консоль администратора Keycloak:
https://rtcloud.example.com/auth/admin
Войдите с KEYCLOAK_ADMIN_USER и KEYCLOAK_ADMIN_PASSWORD.
Что предварительно настроено
Встроенный Keycloak запускается с предварительно импортированной областью rtsurvey, включающей:
- Конфигурацию клиента для веб-приложения
- Стандартные роли пользователей (
admin,project_manager,enumerator,analyst) - Настройки сессий и токенов, оптимизированные для rtSurvey
Вы можете добавлять пользователей напрямую в консоли администратора Keycloak или подключить Keycloak к вышестоящему поставщику идентификации (LDAP, SAML).
Маршрутизация Nginx
При использовании скриптов облачного развёртывания Nginx настроен для проксирования обоих сервисов:
| Путь | Бэкенд |
|---|---|
/ | Приложение rtCloud на 127.0.0.1:8080 |
/auth/ | Keycloak на 127.0.0.1:8090 |
Внешний провайдер OIDC
Подключите rtCloud к любому OpenID Connect-совместимому поставщику идентификации. Этот подход не требует контейнера Keycloak.
Поддерживаемые провайдеры
Работает любой OIDC-совместимый провайдер, включая:
- Authentik
- Auth0
- Okta
- Keycloak (внешний экземпляр)
- Supabase
- Google (для организаций Google Workspace)
- GitHub (через OAuth apps с расширением OIDC)
Настройка
1. Зарегистрируйте rtCloud как OIDC-клиент у вашего поставщика идентификации.
Вам понадобится:
- Идентификатор клиента и секрет клиента
- Зарегистрировать URI перенаправления:
https://rtcloud.example.com/auth/callback - Для поддержки мобильного приложения также зарегистрируйте:
vn.rta.rtsurvey.auth://callback
2. Настройте переменные окружения в .env:
# URL обнаружения OIDC (зависит от провайдера — проверьте документацию IdP)
OIDC_ISSUER_URL=https://your-identity-provider.com
# Учётные данные клиента от вашего поставщика идентификации
OIDC_CLIENT_ID=rtcloud-app
OIDC_CLIENT_SECRET=your-client-secret-here
# Запрашиваемые области (openid, profile и email обычно достаточно)
OIDC_SCOPE=openid profile email
# URI перенаправления, зарегистрированный у вашего поставщика идентификации
OIDC_REDIRECT_URI=https://rtcloud.example.com/auth/callback
# Опционально: отдельный клиент для мобильного приложения
OIDC_MOBILE_CLIENT_ID=rtcloud-mobile
OIDC_MOBILE_REDIRECT_URI=vn.rta.rtsurvey.auth://callback
# Установите true для автоматического создания учётных записей rtCloud для новых пользователей OIDC
OPEN_REGISTRATION=false
3. Перезапустите контейнер приложения для применения изменений:
docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
Автоматическое создание пользователей
При OPEN_REGISTRATION=true rtCloud автоматически создаёт локальную учётную запись при первом входе пользователя через OIDC. Учётная запись заполняется именем и email из ID-токена.
При OPEN_REGISTRATION=false (по умолчанию) администратор rtCloud должен сначала создать учётную запись пользователя, а идентификатор OIDC связывается при первом входе.
Пользовательские конечные точки
Если ваш провайдер не поддерживает обнаружение OIDC (.well-known/openid-configuration), вы можете задать конечные точки вручную:
OIDC_AUTHORIZATION_ENDPOINT=https://your-provider.com/oauth2/authorize
OIDC_TOKEN_ENDPOINT=https://your-provider.com/oauth2/token
OIDC_USERINFO_ENDPOINT=https://your-provider.com/oauth2/userinfo
Azure Active Directory
Интеграция rtCloud с арендатором Microsoft Azure AD вашей организации.
Настройка
1. Зарегистрируйте новое приложение на Azure Portal:
- Перейдите в Azure Active Directory → App registrations → New registration
- Имя:
rtCloud - URI перенаправления:
https://rtcloud.example.com/auth/callback(тип Web) - После создания запишите Application (client) ID и Directory (tenant) ID
- В разделе Certificates & secrets создайте новый секрет клиента
2. Настройте переменные окружения в .env:
AZURE_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
AZURE_TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
3. Перезапустите контейнер приложения:
docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
Пользователи в арендаторе Azure AD теперь могут входить в rtCloud, используя свои учётные данные Microsoft.
Отключение SSO
Для возврата к локальной аутентификации удалите или закомментируйте все переменные, связанные с SSO, из .env, затем перезапустите контейнер приложения:
docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
Если вы использовали встроенный Keycloak, остановите его, опустив флаг --profile embed-keycloak, выполнив docker compose down, а затем up -d без профиля.