From 0eeedfad7d6fc123a3eee8aeb4cf46a6974efd51 Mon Sep 17 00:00:00 2001 From: TheSt1tch Date: Sat, 15 Mar 2025 14:43:45 +0500 Subject: [PATCH] upadte --- docs/docker/nextcloud/oidc-login.md | 85 ++++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/docs/docker/nextcloud/oidc-login.md b/docs/docker/nextcloud/oidc-login.md index 14b590b..83ce1c9 100644 --- a/docs/docker/nextcloud/oidc-login.md +++ b/docs/docker/nextcloud/oidc-login.md @@ -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:///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="" \ + --clientsecret="" \ + --discoveryuri="" \ + --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) \ No newline at end of file +Применимо только для приложения nextcloud: **user_oidc** (https://github.com/nextcloud/user_oidc) + +Для админов остается возможность входа напрямую: `https://nextcloud/login?direct=1` \ No newline at end of file