Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Nextcloud — отличное решение для хранения файлов, но управление пользователями вручную становится головной болью при масштабировании. Keycloak позволяет централизовать аутентификацию, обеспечивая безопасность, поддержку MFA (двухфакторной аутентификации) и удобный вход через корпоративный портал.

В этом руководстве мы настроим сквозную авторизацию, где Keycloak выступает провайдером удостоверений (IdP), а Nextcloud — клиентом (RP).

📋 Что нам понадобится

  1. Keycloak: уже установленный и запущенный (версия 21+ или Red Hat SSO).
  2. Nextcloud: установленный экземпляр (желательно последней версии).
  3. Модуль OIDC: для Nextcloud он называется Social Login.
  4. HTTPS: крайне рекомендуется использовать SSL/TLS на обеих сторонах.

Настройка клиента в Keycloak

В целом настройка Keycloak аналогична настройке для Gitea и таким же образом сначала создадим точку входа для Nextcloud в Keycloak.

  1. Зайдите в административную панель Keycloak.
  2. Выберите нужный или создайте новый Realm (область безопасности).
  3. Перейдите в раздел ClientsCreate client.
  4. Заполните основные поля:
    • Client type: OpenID Connect.
    • Client ID: nextcloud (или любое уникальное имя, например my-company-nextcloud).
    • Нажмите Next.

Конфигурация клиента (Capability config)

  • Client authentication: On (включить). Это позволит Nextcloud использовать Client Secret.
  • Authorization: Off (если не планируете сложные права доступа внутри Keycloak).
  • Authentication flow: оставьте стандартные настройки (Standard flow).

Root URL и Redirect URIs

Это критически важный шаг. Nextcloud должен знать, куда отправлять пользователя после входа.

  • Root URL: https://your-nextcloud-domain.com/
  • Valid redirect URIs: https://your-nextcloud-domain.com/index.php/apps/sociallogin/custom_oidc/
  • Важно: если у вас кастомный плагин или другая версия модуля, URI может отличаться, но чаще всего используется путь /apps/sociallogin/custom_oidc/
  • Web origins: https://your-nextcloud-domain.com/

Сохраните настройки.

Получение данных для Nextcloud

Перейдите во вкладку Credentials вашего нового клиента.

  • Скопируйте Client secret. Он понадобится нам позже.

Настройка Realm (маппинг атрибутов)

Чтобы Nextcloud знал имя и почту пользователя, нужно настроить сопоставление полей (Mappers).

  1. В настройках клиента перейдите на вкладку Client scopes.
  2. Нажмите на scope по умолчанию (обычно это название клиента + -dedicated или просто выберите roles, email, profile).
  3. Перейдите в Mappers.
  4. Убедитесь, что есть мапперы для:
    • email → email;
    • username → preferred_username (или nickname);
    • name → name.

Если их нет, создайте их вручную:

  • Protocol: OpenID Connect.
  • Mapper Type: User Attribute (для имени) или User Property (для email).
  • Token Claim Name: name, email, preferred_username.

Установка и настройка плагина Social Login в Nextcloud

Установка приложения Social Login

  1. Зайдите в ваш Nextcloud под администратором.
  2. Перейдите в Apps → найдите «Social Login» (by Christian Gräfe) и установите его.
  3. После установки перейдите в настройки администратора (SettingsAdministrationSocial Login).

Настройте основные параметры как вам больше нравится. В моем случае получилось так.

  • Не разрешать создание учётной записи, если адрес электронной почты уже используется другой учётной записью
  • Обновлять профиль пользователя при каждом входе
  • Автоматически создавать группы, если они не существуют
  • Запрещать вход пользователям без сопоставленных групп
  • Запрещать вход пользователям без назначенных групп

Конфигурация провайдера

Нажмите кнопку «Custom OpenID Connect».

Заполните форму следующими данными:

ПараметрЗначениеОписание
Internal namekeycloakИмя для отображения внутри админки NC.
TitleCompany SSOТекст на кнопке входа («Войти через Company SSO»).
Authorize URLhttps://keycloak.domain.com/realms/<YOUR_REALM>/protocol/openid-connect/authАдрес авторизации Keycloak.
Token URLhttps://keycloak.domain.com/realms/<YOUR_REALM>/protocol/openid-connect/tokenАдрес получения токена.
User Info URLhttps://keycloak.domain.com/realms/<YOUR_REALM>/protocol/openid-connect/userinfoПрофиль пользователя.
Logout URL(опционально)Можно оставить пустым или указать эндпоинт логаута Keycloak.
Client IDnextcloudТот самый ID из шага 1.
Client Secretваш_секрет_из_KeycloakСкопированный ранее секрет.
Scopeopenid email profileОбязательные скоупы.

Маппинг полей (Attribute Mapping)

Укажите, откуда брать данные:

  • User ID key: sub (это уникальный идентификатор пользователя в Keycloak, менять не стоит).
  • Nickname key: preferred_username.
  • Email key: email.
  • Name key: name.

💡 Совет: включите опцию «Auto create users», если хотите, чтобы аккаунты создавались автоматически при первом входе. Также включите «Disable login form», если хотите принудительно перенаправлять всех на Keycloak.

Группы и права доступа

Интеграция работает, но пользователи заходят с правами «по умолчанию». Чтобы управлять доступом через Keycloak:

  1. В настройках Social Login нажмите на созданный провайдер (keycloak) и откройте вкладку Groups.
  2. Создайте связь: группа в Keycloak → группа в Nextcloud.
    • Например, роль nc_admins в Keycloak должна давать группу admin в Nextcloud.
  3. В Keycloak зайдите в Roles, создайте роль (например, nextcloud_admin) и назначьте её нужным пользователям.
  4. В Nextcloud убедитесь, что группы с такими именами существуют, или разрешите их автоматическое создание.

Тонкая настройка (config.php)

Иногда возникают проблемы с циклическими редиректами или проверкой сертификатов. Добавьте следующие параметры в файл config/config.php вашего Nextcloud:

// Отключаем принудительную проверку HTTPS для внутренних вызовов к Keycloak,
// если у вас самоподписанный сертификат на Keycloak (НЕ РЕКОМЕНДУЕТСЯ ДЛЯ PROD)
'allow_local_remote_servers' => true,

// Если Nextcloud за обратным прокси (Nginx/Traefik)
'overwriteprotocol' => 'https',
'overwritewebroot' => '/',

Для работы Logout (выхода) добавьте в конфиг:

'logout_url' => 'https://keycloak.domain.com/realms/<REALM>/protocol/openid-connect/logout?post_logout_redirect_uri=https%3A%2F%2Fnextcloud.domain.com'

Решение часто возникающих при настройке проблем проблем

Ошибка «Invalid redirect URI»

Проверьте точное написание URL в поле Valid redirect URIs в Keycloak. Не должно быть лишних слешей в конце или разницы между http и https.

Пользователь создаётся без почты или имени

Проверьте вкладку Mappers в Client Scopes Keycloak. Убедитесь, что claim names (email, name) совпадают с тем, что вы указали в настройках Social Login в Nextcloud.

Циклическая переадресация (Loop)

Обычно возникает, если пользователь залогинился в Nextcloud локально, а потом пытается зайти через SSO.

  • Решение: в настройках Social Login поставьте галочку «Hide login form». Тогда пользователь всегда будет уходить на Keycloak.

Проблема с CORS / Mixed Content

Если Keycloak и Nextcloud на разных доменах, убедитесь, что в Keycloak заполнено поле Web Origins. Обычно туда ставят + (разрешить всё) или конкретные домены.

Итоговый результат

Теперь процесс входа выглядит так:

  1. Пользователь заходит на nextcloud.yourcompany.com.
  2. Нажимает кнопку «Company SSO».
  3. Перенаправляется на страницу логина Keycloak.
  4. Вводит пароль (и проходит MFA, если настроено).
  5. Keycloak возвращает токен Nextcloud.
  6. Пользователь авторизован в Nextcloud под своей учётной записью с правами, привязанными к ролям Keycloak.

Похожие записи

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог…

Интеграция Gitea и Keycloak: пошаговое руководство

В современном мире разработки программного обеспечения безопасность и управление доступом к репозиториям кода играют ключевую роль. Gitea — это лёгкая и гибкая платформа для хостинга IT-проектов и их совместной разработки,…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда