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