Discourse intègre DiscourseConnect, qui vous permet de transformer votre Discourse en fournisseur d’identité unique (SSO). Vous pouvez en trouver plus d’informations dans l’article « Utiliser Discourse comme fournisseur d’identité (SSO, DiscourseConnect) ». Cependant, ce qu’il propose n’est pas un protocole SAML ou OAuth standard.
Nous devons donc utiliser un module créé par Paul B. sur le forum Discourse. Ce module permet de connecter DiscourseConnect à SimpleSAMLphp, puis d’utiliser SimpleSAMLphp pour fournir un protocole de connexion SAML standard. Je tiens ici à le remercier sincèrement pour son aide qui a rendu cela possible. Vous pouvez également trouver le module ici :
Commençons le guide.
Tout d’abord, nous devons configurer SimpleSAMLphp.
Téléchargez SimpleSAMLphp.
wget https://simplesamlphp.org/download?latest
Puis décompressez.
tar zxf download?latest
Déplacez ensuite le fichier vers /var/simplesamlphp.
sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/
Donnez ensuite ce dossier à l’utilisateur www-data et accordez les permissions 755.
sudo chown -R www-data:www-data /var/simplesamlphp/
sudo chmod -R 755 /var/simplesamlphp/
Vous vous demandez peut-être pourquoi le chemin doit être /var/simplesamlphp. C’est parce que la documentation officielle le place ici. Vous aurez besoin d’une configuration supplémentaire si vous le placez ailleurs.
Configurez ensuite nginx et pointez l’index vers /www dans son dossier. Si vous utilisez Apache, trouvez la configuration dans la documentation officielle.
upstream saml-php-handler {
server unix:/run/php/php8.0-fpm.sock;
}
server {
listen 443 ssl;
server_name VOTRE_DOMAINE_SAML;
index index.php;
ssl_certificate VOTRE_CERTIFICAT;
ssl_certificate_key VOTRE_CLE;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
location ^~ /simplesaml {
alias /var/simplesamlphp/www;
location ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\.php)(?<pathinfo>/.*)?$ {
include fastcgi_params;
fastcgi_pass saml-php-handler;
fastcgi_param SCRIPT_FILENAME $document_root$phpfile;
# Doit être préfixé par la baseurlpath
fastcgi_param SCRIPT_NAME /simplesaml$phpfile;
fastcgi_param PATH_INFO $pathinfo if_not_empty;
}
}
}
Mettez ensuite à jour votre source :
sudo apt update
Installez ensuite le paquet logiciel :
sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached
Remarque : Ici, il vous est demandé d’installer en fonction de votre version de PHP. Par exemple, si vous utilisez php8.0, vous devrez ajouter “8.0” après tous les “php”. Par exemple : php8.0-xml.
Redémarrez Nginx pour activer la nouvelle extension PHP une fois l’installation terminée :
sudo systemctl restart Nginx
Générez ensuite un sel :
openssl rand -base64 32
Copiez ce sel.
Ouvrez ensuite /var/simplesamlphp/config/config.php
'auth.adminpassword',VOTRE_MOT_DE_PASSE;
'secretsalt',VOTRE_SEL;
'technicalcontact_name',VOTRE_NOM;
'technicalcontact_email' ,VOTRE_EMAIL;
'language.default',CHANGEZ_POUR_VOTRE_LANGUE;
'timezone',CHANGEZ_POUR_VOTRE_ZONE;
'enable.saml20-idp' => true,
Ensuite, ouvrez https://VOTRE_DOMAINE_SAML/simplesaml. En théorie, votre SimpleSAMLphp devrait fonctionner maintenant.
Installez ensuite Composer.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/bin/composer
Vous devriez ensuite pouvoir taper composer pour l’exécuter.
Allez dans /var/simplesamlphp, modifiez composer.json, changez la version en dev-master.
La raison pour laquelle nous faisons cela ici est que le module discourse-simplesamlphp nécessite la version “dev-master”, alors que sa version par défaut est un nombre. Nous devons donc changer la version en “dev-master”.
Installez ensuite ce module.
composer require swcc/simplesamlphp-module-authdiscourse dev-master --ignore-platform-reqs
Le paramètre “–ignore-platform-reqs” permet d’éviter que votre version de PHP ne corresponde pas aux exigences.
Vous devriez maintenant voir Composer commencer à installer swcc/simplesamlphp-module-authdiscourse.
Une fois l’installation terminée, entrez :
touch /var/simplesamlphp/modules/authdiscourse/enable
Pour activer ce plugin.
Activez ensuite les options “discourse connect provider secrets” et “enable discourse connect provider” dans votre forum Discourse.
Dans “discourse connect provider secrets”, entrez votre domaine SAML et un secret SSO.
Modifiez ensuite config/authsources.php dans le dossier simplesamlphp :
<?php
$config = [
// Ceci est une source d'authentification qui gère l'authentification de l'administrateur.
'admin' => [
'core:AdminPassword',
],
// Ceci est la source d'authentification utilisant l'authentification Discourse.
'discourse-sso' => [
'authdiscourse:Discourse',
'url' => 'https://discourse.your-domain.org',
'secret' => '<votre-secret-sso>',
],
];
Vous devez ajouter cette partie à l’endroit approprié :
'discourse-sso' => [
'authdiscourse:Discourse',
'url' => 'VOTRE_DOMAINE_DISCOURSE',
'secret' => 'SECRET_SSO_DISCOURSE',
],
Pour permettre à SimpleSAMLphp d’utiliser discourse-sso pour l’authentification.
Enfin, ouvrez https://VOTRE_DOMAINE_SAML/simplesaml/module.php/core/authenticate.php?as=discourse-sso
OU
Ouvrez https://VOTRE_DOMAINE_SAML/simplesaml/ puis cliquez sur authentication puis sur discourse-sso pour tester.
Si cela renvoie les informations correctes, cela signifie que vous avez configuré avec succès votre SimpleSAMLphp pour qu’il se connecte à votre Discourse.
Vous devez maintenant configurer les paramètres de votre fournisseur d’identité (IdP).
Vous devez d’abord générer un certificat pour l’IdP en utilisant :
openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out VOTRE_DOMAINE_SAML.crt -keyout VOTRE_DOMAINE_SAML.pem
Si vous le générez dans le répertoire racine, vous pouvez voir votre nouveau certificat là-bas.
Déplacez ensuite votre certificat là où vous le souhaitez, puis donnez-les à l’utilisateur www-data avec les permissions 755.
chown -R www-data:www-data /CHEMIN_VERS_VOTRE_CERTIFICAT
chmod -R 755 /CHEMIN_VERS_VOTRE_CERTIFICAT
Enfin, modifiez le chemin de votre certificat et votre source d’authentification dans metadata/saml20-idp-hosted.php.
<?php
$metadata['__DYNAMIC:1__'] = [
/*
* Le nom d'hôte de cet IdP. Cela permet d'exécuter plusieurs
* IdP à partir de la même configuration. '__DEFAULT__' signifie que celui-ci
* doit être utilisé par défaut.
*/
'host' => '__DEFAULT__',
/*
* La clé privée et le certificat à utiliser lors de la signature des réponses.
* Ils sont stockés dans le répertoire des certificats.
*/
'privatekey' => '/CHEMIN_VERS_VOTRE_CLE',
'certificate' => '/CHEMIN_VERS_VOTRE_CERTIFICAT',
/*
* La source d'authentification qui doit être utilisée pour authentifier
* l'utilisateur. Cela doit correspondre à l'une des entrées dans config/authsources.php.
* REMARQUE : VOUS DEVEZ CHANGER LA MÉTHODE D'AUTHENTIFICATION EN "discourse-sso"
*/
'auth' => 'discourse-sso',
];
Maintenant, votre SimpleSAMLphp utilise Discourse comme base de données utilisateur backend, en tant qu’IdP SAML, fournissant un protocole de connexion SAML standard.
ID de l’IdP (URI) : https://VOTRE_DOMAINE_SAML/simplesaml/saml2/idp/metadata.php
URL Cible (utilisée pour envoyer la requête d’identification du SP) : https://VOTRE_DOMAINE_SAML/simplesaml/saml2/idp/SSOService.php
Certificat X509 : https://VOTRE_DOMAINE_SAML/simplesaml/module.php/saml/idp/certs.php/idp.crt
Ou pour les SP qui vous permettent de télécharger directement le fichier de métadonnées de l’IdP, vous pouvez télécharger les métadonnées de l’IdP : https://VOTRE_DOMAINE_SAML/simplesaml/saml2/idp/metadata.php
Tout est terminé. Tout devrait fonctionner maintenant.
Profitez-en ~
Ensuite, j’expliquerai peut-être comment connecter SimpleSAMLphp alimenté par Discourse comme méthode de connexion SAML de NextCloud.
Tout ce qui n’est pas clair peut être répondu dans ce post ou vous pouvez me contacter via admin@rail.moe.