Перейти к содержанию

Nextcloud OIDC через Authentik

Для авторизации в своих сервисах, я использую Authentik. Ранее, вход в мой nextcloud осуществлялся через Google Open Auth 2, но я решил его поменять на Authentik. Это было сделано для того, чтобы иметь 1 портал по управлению всеми входами в моей лабе.

Будем считать, что Authentik уже настроен и работает на домене authentik.site. Nextcloud работает на домене nextcloud.site

Настройка производится через OIDC или OpenID Connect - это уровень идентификации, основанный на более обширной структуре авторизации OAuth2. Приложения могут использовать OIDC для аутентификации пользователя (т. е. проверки личности пользователя) и извлечения метаданных о пользователе (имя, адрес электронной почты и т. д.), но в то же время могут использовать собственные внутренние механизмы авторизации (т. е. то, к чему у пользователя есть доступ).

Параметры

Рассмотрим варианты, с помощью которых мы можем подключить OIDC к nextcloud:

  • Social Login : фокусируется в основном на поставщиках удостоверений Google/Amazon/…, но все они основаны на внутреннем OIDC. Можно использовать кастомных поставщиков. Плагин активно поддерживается, но, к сожалению, только одним разработчиком.
  • Nextcloud OIDC Login : отлаженный и хорошо документированный плагин, который, к сожалению, находится только в режиме обслуживания из-за нехватки разработчиков.
  • user_oidc : наименее проработанный, но расположенный в github.com/nextcloud организации и, по-видимому, поддерживаемый разработчиками Nextcloud.

user_oidc

Из трех вариантов выше, выбрал user_oidc

Из минусов, user_oidc не поддерживает групповую подготовку пользователей. Для моей установки это не нужно. Но если для вашей требуется, то тогда придется выбрать другой вариант.

Другая проблема user_oidc, в том, что часть параметров настраивается через веб-интерфейс, другая через occ CLI.

Настройка Authentik

Нужно создать приложение и провайдера на Authentik.

Переходим в Applications меню и жмем на Create

Далее нажимаем на Create Provider и заполняем следующими настройками:

  • Type : Поставщик Oauth2/OIDC
  • Authorization flow : implicit consent (в противном случае вашим пользователям придется явно подтверждать каждый вход в систему!)
  • Client type : Confidential
  • Client ID : (оставьте автоматически сгенерированное значение без изменений)
  • => скопируйте это значение для дальнейшего использования
  • Client Secret : ==[ВАЖНО]== ==обрежьте автоматически сгенерированное значение до 64 символов — в настоящее время== ==в user_oidc есть ошибка, которая не позволяет использовать более длинные секреты клиента== ==. Секрет клиента длиной 64 символа по-прежнему достаточен с точки зрения безопасности.==
  • => скопируйте это значение для дальнейшего использования
  • Redirect URIs : https://<NEXTCLOUD-HOSTNAME>/apps/user_oidc/code
  • Advanced protocol settings > Subject mode : на основе имени пользователя
  • Эту настройку следует использовать для того, чтобы гарантировать, что идентификатор федеративного облака Nextcloud будет иметь понятное человеку значение, например [email protected]
  • Нажмите Готово.

Возвращаемся в меню создания приложения и нажимаем кнопку Create.

Далее, переключаемся в секцию Провайдеров, находим наш только что созданный провайдер, кликаем по нему и копируем OpenID Configuration URL - он будет иметь вид https://authentik.site/application/o/nextcloud/.well-known/openid-configuration

Настройка Nextcloud

Теперь переключаемся на nextcloud. Для начала нужно войти в nextcloud под админстратором, далее перейти в “Приложения”, найти OpenID Connect user backend и нажать “Скачать и установить”.

В “Параметрах” (Админ секция) находим слева меню OpenID Connect user backend. Жмем на + и выбираем регистрацию нового провайдера. Заполняем данными, полученными из Authentik:

  • Identifier: Authentik (Можно ввести любое значение, которое будет отображаться на экране входа: Вход через ___)
  • Client ID: (Копируем из Authentik)
  • Client Secret: (Копируем из Authentik)
  • Discovery endpoint: (OpenID Configuration URL скопированный из Authentik, должен заканчиваться на .well-known/openid-configuration)
  • Attribute mappings: если у вас нестандартная настройка поставщика удостоверений (с настраиваемыми полями/атрибутами), значения-заполнители должны работать и их можно оставить как есть.
  • Снимаем галочку с Use unique user ID - когда эта опция включена, Nextcloud будет использовать хэш (контрольную сумму) идентификатора поставщика + идентификатор пользователя в качестве внутреннего идентификатора пользователя. К сожалению, это создает довольно уродливые и длинные идентификаторы federation cloud. Если вы не используете несколько поставщиков OIDC или несколько пользовательских бэкендов Nextcloud, я считаю, что можно безопасно отключить (снять отметку) эту опцию, поскольку в пределах одного поставщика OIDC не может быть конфликта имен.
  • Нажмите на Submit

!!! tip="Для автоматизации"

Эту же установку можно сделать через `occ`:

```yaml
php ./occ app:install user_oidc
php ./occ user_oidc:provider "Authentik" \
    --clientid="<CLIENT-ID>" \
    --clientsecret="<CLIENT-SECRET>" \
    --discoveryuri="<AUTHENTIK-OPENID-CONFIGURATION-URL>" \
    --unique-uid=0

# for help, refer to:
php ./occ user_oidc:provider -h
php ./occ user_oidc:provider:delete -h
php ./occ app -h
```

Убрать форму входа

Добавил авторизацию через Authentik, но потребовалось сделать так, чтобы формы входа не было. Чтобы сразу шел редирект на страницу авторизации Authentik.

Для этого нужно выолпнить команду (nextcloud в докере):

docker exec -ti --user 1000 nextcloud_app php occ config:app:set --value=0 user_oidc allow_multiple_user_backends
где nextcloud_app - имя контейнера

Применимо только для приложения nextcloud: user_oidc (https://github.com/nextcloud/user_oidc)

Для админов остается возможность входа напрямую: https://nextcloud/login?direct=1