All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
12 KiB
description, i18n_source_hash, i18n_provenance, i18n_output_hash
| description | i18n_source_hash | i18n_provenance | i18n_output_hash |
|---|---|---|---|
| Настройте единый вход через OpenID Connect. Пошаговые руководства для Keycloak, Authentik, Google и других провайдеров OIDC. | 4296343b3cc5 | human | 30c887791088 |
OIDC / Единый вход
SnapOtter поддерживает OpenID Connect (OIDC) для единого входа. Пользователи могут входить с помощью внешнего поставщика удостоверений, такого как Keycloak, Authentik или Google, вместо (или наряду с) локальной аутентификации по имени пользователя и паролю.
::: tip См. также SAML SSO | Провижининг SCIM | Пользователи, роли и права доступа :::
Быстрый старт
Добавьте эти переменные окружения в ваш docker-compose.yml:
services:
SnapOtter:
image: snapotter/snapotter:latest
environment:
EXTERNAL_URL: "https://photos.example.com"
OIDC_ENABLED: "true"
OIDC_ISSUER_URL: "https://auth.example.com/realms/myrealm"
OIDC_CLIENT_ID: "snapotter"
OIDC_CLIENT_SECRET: "your-secret-here"
URI перенаправления для вашего провайдера всегда:
${EXTERNAL_URL}/api/auth/oidc/callback
Например, если EXTERNAL_URL равен https://photos.example.com, настройте URI перенаправления вашего провайдера как https://photos.example.com/api/auth/oidc/callback.
Справочник конфигурации
| Переменная | По умолчанию | Описание |
|---|---|---|
OIDC_ENABLED |
false |
Включить вход через OIDC. На странице входа появляется кнопка «Sign in with SSO». |
OIDC_ISSUER_URL |
URL издателя провайдера. Должен поддерживать OIDC Discovery (/.well-known/openid-configuration). |
|
OIDC_CLIENT_ID |
Идентификатор клиента OAuth, зарегистрированный у вашего провайдера. | |
OIDC_CLIENT_SECRET |
Секрет клиента OAuth. | |
OIDC_SCOPES |
openid profile email |
Список областей для запроса, разделённых пробелами. |
OIDC_AUTO_CREATE_USERS |
true |
Автоматически создавать локальную учётную запись пользователя при первом входе через OIDC. |
OIDC_DEFAULT_ROLE |
user |
Роль, назначаемая автоматически создаваемым пользователям OIDC. Одна из admin, editor или user. |
OIDC_AUTO_LINK_USERS |
false |
Связать удостоверение OIDC с существующим локальным пользователем, если адрес электронной почты совпадает. |
OIDC_PROVIDER_NAME |
Отображаемое имя на кнопке входа (например, «Keycloak», «Google»). Если пусто, на кнопке написано «SSO». | |
OIDC_CLOCK_TOLERANCE |
30 |
Допустимое расхождение часов в секундах при проверке токена. |
OIDC_USERNAME_CLAIM |
preferred_username |
Клейм ID-токена, используемый как имя пользователя для новых учётных записей. |
EXTERNAL_URL |
Публичный URL, по которому доступен SnapOtter. Требуется для OIDC, чтобы построить корректный URI перенаправления. | |
COOKIE_SECRET |
генерируется автоматически | Секрет для подписи сессионных cookie. Задавайте его явно при запуске нескольких реплик. |
Руководства по провайдерам
Keycloak
- Создайте новый realm (или используйте существующий).
- Перейдите в Clients и создайте новый клиент:
- Client ID:
snapotter - Client authentication: On (confidential)
- Authentication flow: Standard flow (Authorization Code)
- Client ID:
- На вкладке Settings клиента задайте Valid redirect URIs равным вашему callback URL (например,
https://photos.example.com/api/auth/oidc/callback). - Скопируйте Client secret с вкладки Credentials.
- Задайте
OIDC_ISSUER_URLравнымhttps://keycloak.example.com/realms/your-realm.
Authentik
- В интерфейсе администратора перейдите в Applications > Providers и создайте новый OAuth2/OpenID Provider.
- Client type: Confidential
- Redirect URIs: Ваш callback URL
- Signing key: Выберите существующий ключ или создайте новый
- Создайте Application и свяжите его с провайдером.
- Скопируйте Client ID и Client Secret из настроек провайдера.
- Задайте
OIDC_ISSUER_URLравнымhttps://authentik.example.com/application/o/snapotter/(завершающая косая черта важна).
- Перейдите в Google Cloud Console.
- Создайте проект (или выберите существующий).
- Перейдите в APIs & Services > OAuth consent screen и настройте его.
- Перейдите в APIs & Services > Credentials и создайте OAuth 2.0 Client ID:
- Application type: Web application
- Authorized redirect URIs: Ваш callback URL
- Скопируйте Client ID и Client secret.
- Задайте
OIDC_ISSUER_URLравнымhttps://accounts.google.com. - Задайте
OIDC_USERNAME_CLAIMравнымemail(Google не предоставляетpreferred_username).
Провижининг пользователей
Автоматическое создание
Когда OIDC_AUTO_CREATE_USERS равен true (по умолчанию), локальная учётная запись пользователя создаётся при первом входе кого-либо через OIDC. Имя пользователя берётся из клейма, указанного в OIDC_USERNAME_CLAIM, а роль устанавливается в OIDC_DEFAULT_ROLE.
Если возникает конфликт имён пользователей, добавляется числовой суффикс (например, jane становится jane_2).
Автоматическое связывание
Когда OIDC_AUTO_LINK_USERS равен true, SnapOtter связывает удостоверение OIDC с существующей локальной учётной записью, если адреса электронной почты совпадают. Это полезно, когда у вас есть заранее созданные учётные записи пользователей и вы хотите, чтобы они начали использовать SSO без потери своих данных.
::: warning Включайте автоматическое связывание, только если вы доверяете своему провайдеру OIDC в проверке адресов электронной почты. Непроверенный адрес электронной почты может позволить кому-либо захватить учётную запись другого пользователя. :::
Отключение локального входа
OIDC не отключает локальный вход по имени пользователя и паролю. Оба метода остаются доступными. Администраторы по-прежнему могут входить с локальными учётными данными, если провайдер OIDC недоступен.
Самоподписанные сертификаты
Если ваш провайдер OIDC использует самоподписанный сертификат или сертификат частного CA, смонтируйте набор сертификатов CA в контейнер и укажите на него NODE_EXTRA_CA_CERTS:
services:
SnapOtter:
image: snapotter/snapotter:latest
volumes:
- ./my-ca.pem:/etc/ssl/certs/custom-ca.pem:ro
environment:
NODE_EXTRA_CA_CERTS: /etc/ssl/certs/custom-ca.pem
OIDC_ENABLED: "true"
OIDC_ISSUER_URL: "https://auth.internal.example.com/realms/myrealm"
OIDC_CLIENT_ID: "snapotter"
OIDC_CLIENT_SECRET: "your-secret-here"
::: danger
Не задавайте NODE_TLS_REJECT_UNAUTHORIZED=0. Это отключает всю проверку TLS и представляет угрозу безопасности.
:::
Устранение неполадок
Несоответствие URI перенаправления
Самая частая ошибка. Проверьте эти различия между тем, что ожидает ваш провайдер, и тем, что отправляет SnapOtter:
httpпротивhttps- схема должна совпадать в точности- Завершающая косая черта - некоторые провайдеры строги к этому
- Номер порта - включите порт, если он нестандартный
- Путь - должен быть
/api/auth/oidc/callback
Ещё раз проверьте EXTERNAL_URL. Он должен совпадать с URL, который пользователи вводят в браузере.
UNABLE_TO_VERIFY_LEAF_SIGNATURE
Провайдер OIDC использует сертификат, которому Node.js не доверяет. См. Самоподписанные сертификаты выше.
Ошибки расхождения часов
Если часы вашего сервера и провайдера OIDC не синхронизированы, проверка токена может завершиться неудачей. Увеличьте OIDC_CLOCK_TOLERANCE (по умолчанию 30 секунд). Лучшее решение - запустить NTP на обеих машинах.
«OIDC provider unreachable»
SnapOtter получает документ обнаружения провайдера при запуске и во время входа. Проверьте:
- Разрешение DNS изнутри контейнера Docker (
docker exec snapotter nslookup auth.example.com) - Правила брандмауэра между контейнером и провайдером
- Значение
OIDC_ISSUER_URL- оно должно быть доступно с сервера, а не только из вашего браузера
Отсутствующие клеймы
Если имена пользователей или адреса электронной почты пусты после входа, ваш провайдер может не возвращать ожидаемые клеймы. Проверьте:
- Области, настроенные в
OIDC_SCOPES, включаютprofileиemail - Провайдер настроен на включение клейма, указанного в
OIDC_USERNAME_CLAIM, в ID-токен - Некоторые провайдеры требуют явной настройки маппера/области для передачи клеймов