Для авторизации в своих сервисах, я использую **Authentik**. Ранее, вход в мой nextcloud осуществлялся через Google Open Auth 2, но я решил его поменять на Authentik. Это было сделано для того, чтобы иметь 1 портал по управлению всеми входами в моей лабе.
Будем считать, что Authentik уже настроен и работает на домене `authentik.site`. Nextcloud работает на домене `nextcloud.site`
Настройка производится через OIDC или OpenID Connect - это уровень идентификации, основанный на более обширной [структуре авторизации OAuth2](https://oauth.net/2/). Приложения могут использовать OIDC для аутентификации пользователя (т. е. проверки личности пользователя) и извлечения метаданных о пользователе (имя, адрес электронной почты и т. д.), но в то же время могут использовать собственные внутренние механизмы авторизации (т. е. то, к чему у пользователя есть доступ).
## Параметры
Рассмотрим варианты, с помощью которых мы можем подключить OIDC к nextcloud:
* [Social Login](https://github.com/zorn-v/nextcloud-social-login) : фокусируется в основном на поставщиках удостоверений Google/Amazon/…, но все они основаны на внутреннем OIDC. Можно использовать кастомных поставщиков. Плагин активно поддерживается, но, к сожалению, только одним разработчиком.
* [Nextcloud OIDC Login](https://github.com/pulsejet/nextcloud-oidc-login) : отлаженный и хорошо документированный плагин, который, [к сожалению, находится только в режиме обслуживания](https://github.com/pulsejet/nextcloud-oidc-login/issues/182) из-за нехватки разработчиков.
* [user_oidc](https://github.com/nextcloud/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 есть ошибка, которая не позволяет использовать более длинные секреты клиента==](https://github.com/nextcloud/user_oidc/issues/405) ==. Секрет клиента длиной 64 символа по-прежнему достаточен с точки зрения безопасности.==
* => скопируйте это значение для дальнейшего использования
* *Advanced protocol settings* > *Subject mode* : на основе имени пользователя
* Эту настройку следует использовать для того, чтобы гарантировать, что идентификатор федеративного облака Nextcloud будет иметь понятное человеку значение, например `username@nextcloud-hostname.com`
* Нажмите *Готово*.
Возвращаемся в меню создания приложения и нажимаем кнопку `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](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/federated_cloud_sharing_configuration.html). Если вы не используете несколько поставщиков OIDC или несколько пользовательских бэкендов Nextcloud, я считаю, что можно безопасно отключить (снять отметку) эту опцию, поскольку в пределах одного поставщика OIDC не может быть конфликта имен.
Добавил авторизацию через Authentik, но потребовалось сделать так, чтобы формы входа не было. Чтобы сразу шел редирект на страницу авторизации Authentik.
Для этого нужно выолпнить команду (nextcloud в докере):