upadte
ci/woodpecker/push/woodpecker Pipeline was successful Details

main
TheSt1tch 1 month ago
parent 496990d811
commit 0eeedfad7d

@ -1,5 +1,84 @@
# OIDC логин через Authentik
# Nextcloud OIDC через Authentik
Для авторизации в своих сервисах, я использую **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 символа по-прежнему достаточен с точки зрения безопасности.==
* => скопируйте это значение для дальнейшего использования
* *Redirect URIs* : `https://<NEXTCLOUD-HOSTNAME>/apps/user_oidc/code`
* *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 не может быть конфликта имен.
* Нажмите на *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 в докере):
@ -9,4 +88,6 @@ docker exec -ti --user 1000 nextcloud_app php occ config:app:set --value=0 user_
```
где `nextcloud_app` - имя контейнера
Применимо только для приложения nextcloud: **user_oidc** (https://github.com/nextcloud/user_oidc)
Применимо только для приложения nextcloud: **user_oidc** (https://github.com/nextcloud/user_oidc)
Для админов остается возможность входа напрямую: `https://nextcloud/login?direct=1`
Loading…
Cancel
Save