Maintenant que nous avons vu comment monter une infra SSO, il est temps de l'utiliser. Dans cet article nous allons voir comment connecter Nextcloud avec OpenID Connect (OIDC) à LemonLDAP::NG.
Je fais tourner Nextcloud dans un conteneur Docker. Son FQDN est cloud.domain.tld.
Dans cette configuration, seuls les utilisateurs authentifiés sur l'AD pourront utiliser Nextcloud.
Connectez-vous avec un compte admin sur LLNG, puis rendez-vous sur le manager Paramètres généraux > OpenID Connect > Activation et cocher la case Activé
Rendez-vous ensuite sur Service OpenID Connect > Sécurité > Clefs et cliquer sur Nouveau certificats qui remplira les cases Cléf pub et priv.
Rendez-vous sur Clients OpenID Connect puis cliquez sur Ajouter un client OpenID Connect (ici rp-nextcloud).
Cliquer sur le nouveau client créé et configurer Basiques comme ci-dessous.
L'ID et le Secret client ont été générés avec les commandes suivantes :
# ID
tr -cd '[:alnum:]' < /dev/urandom | fold -w "20" | head -n 1
# Secret
tr -cd '[:alnum:]' < /dev/urandom | fold -w "40" | head -n 1
Pour le champs Adresses de redirection autorisées pour la connexion, renseignez https://cloud.domain.tld/apps/oidc_login/oidc
Configurez les attributs exportés comme ci-dessous.
L'attribut groups est primordial car les groupes des utilisateurs seront utilisés par Nextcloud et l'application Group Folder.
Rendez-vous sur Clients OpenID Connect > rp-nextcloud > Options > Sécurité > Règle d'accès pour limiter l'accès à l'application à un ou plss groupes. Si un user tente l'accès OIDC sans passer par le portail LLNG, LLNG le refusera. Dans cet exemple, seuls les membres du groupe "nextcloud" pour avoir accès à l'application.
Dashboard
Ajoutez l'application Nextcloud sur le dashboard du portail en vous rendant sur Paramètres généraux > Menu > Catégories et applications > Mes applications puis cliquez sur Nouvelle application.
Personnalisez l'affichage de l'app Nextcloud sur le dashboard et limitez son affichage sur le dashboard de LLNG aux groupes concernés avec une règle spécifique en vous rendant sur Paramètres généraux > Menu > Catégories et applications > Mes applications > Nextcloud :
Ici seul les utilisateurs du groupe "nextcloud" verront l'application sur leur dashboard.
Installez le plugin OIDC sur Nextcloud :
Éditez le fichier le fichier de conf de Nextcloud (...)/html/config/config.php
et ajoutez ces lignes à la fin du fichier :
(...)
'allow_user_to_change_display_name' => false,
'lost_password_link' => 'disabled',
'oidc_login_provider_url' => 'https://auth.domain.tld',
'oidc_login_client_id' => 'IDOIDCCLIENT',
'oidc_login_client_secret' => 'LACHAINESECRET',
'oidc_login_end_session_redirect' => true,
'oidc_login_logout_url' => 'https://auth.domain.tld',
'oidc_login_auto_redirect' => false,
'oidc_login_redir_fallback' => true,
'oidc_login_hide_password_form' => false,
'oidc_login_button_text' => 'Identification avec OpenID',
'oidc_login_scope' => 'openid profile email',
'oidc_login_use_id_token' => false,
'oidc_login_attributes' =>
array (
'id' => 'sub',
'name' => 'name',
'mail' => 'email',
'groups' => 'groups',
),
'oidc_login_allowed_groups' =>
array (
'nextcloud'),
'oidc_login_use_external_storage' => false,
'oidc_login_proxy_ldap' => false,
'oidc_login_disable_registration' => false,
'oidc_login_redir_fallback' => false,
'oidc_login_tls_verify' => true,
'oidc_create_groups' => true,
); // Le fichier se termine ici avec ");"
Les utilisateurs ne peuvent pas modifier certains paramètres comme leur mot de passe et leur nom d'affichage (ligne 2 et 3)
Même si LLNG limite l'accès aux utilisateurs, le paramètre oidc_login_allowed_groups
permet d'ajouter une deuxième règle de restriction au cas où.
Plus d'infos sur la configuration du plugin ici : https://github.com/pulsejet/nextcloud-oidc-login
L'auth OIDC n'ajoute pas dans les préférences de l'utilisateur nouvellement connecté, la timezone "Europe/Paris". Ceci a pour conséquence d'horodater les activités (dans le mail de notif) sur l'UTC. Nextcloud et l'éditeur du plugin n'ont à ce jour pas corrigé ce problème d'où la nécessité de créer un TRIGGER sur MDB.
Voici comment configurer le trigger :
root@mdb01:/# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 638
(...)
MariaDB [(none)]> use nextcloud;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [nextcloud]>
# Ajout du trigger nommé addtimezone
MariaDB [nextcloud]> DELIMITER $$
MariaDB [nextcloud]> CREATE TRIGGER addtimezone AFTER INSERT ON oc_users FOR EACH ROW BEGIN IF NOT EXISTS (SELECT 1 FROM oc_preferences WHERE userid = NEW.uid and configkey = 'timezone') THEN INSERT INTO oc_preferences VALUES (NEW.uid,'core','timezone','Europe/Paris'); END IF; END$$
MariaDB [nextcloud]> exit
Bye
# Si erreur sur le trigger
DROP TRIGGER IF EXISTS mon_trigger;
Connectez-vous avec un nouvel utilisateur puis vérifier dans le BDD que la ligne soit présente pour chaque utilisateur :
root@mdb01:/# mysql -u root -p
Enter password:
MariaDB [(none)]> use nextcloud;
MariaDB [nextcloud]> select * from oc_preferences where configkey = "timezone";
+------------+-------+-----------+--------------+
| userid | appid | configkey | configvalue |
+------------+-------+-----------+--------------+
| localadm01 | core | timezone | Europe/Paris |
| olivier | core | timezone | Europe/Paris |
| test02 | core | timezone | Europe/Paris |
| test03 | core | timezone | Europe/Paris |
| test04 | core | timezone | Europe/Paris |
+------------+-------+-----------+--------------+
Si l'utilisateur existe déjà, voici la manipulation à faire :
root@mdb01:/# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 667
Server version: 10.5.11-MariaDB-1:10.5.11+maria~focal mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use nextcloud;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [nextcloud]> INSERT INTO oc_preferences (userid, appid, configkey, configvalue) VALUES ('c.dupont', 'core', 'timezone', 'Europe/Paris');
Query OK, 1 row affected (0.001 sec)
# Si erreur :
DELETE FROM oc_preferences WHERE userid = 'c.dupont' AND configkey = 'timezone';