Discourse ha integrato DiscourseConnect che ti consente di trasformare il tuo Discourse in un provider SSO. Puoi trovarlo nell’articolo “Utilizzare Discourse come provider di identità (SSO, DiscourseConnect)”. Tuttavia, ciò che fornisce non è un protocollo standard SAML o Oauth.
Quindi, dobbiamo utilizzare un modulo creato da Paul B. nel forum di Discourse. Questo è un modulo che ci consente di connettere DiscourseConnect a SimpleSAMLphp e quindi utilizzare SimpleSAMLphp per fornire un protocollo di servizio di accesso SAML standard. Qui voglio ringraziare molto il suo aiuto che ha reso possibile tutto questo. Puoi anche trovare il modulo qui:
Ora iniziamo la guida.
Innanzitutto, dobbiamo configurare SimpleSAMLphp.
Scarica SimpleSAMLphp per prima cosa.
wget https://simplesamlphp.org/download?latest
E poi decomprimi.
tar zxf download?latest
Quindi sposta il file in /var/simplesamlphp.
sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/
Quindi assegna questa cartella all’utente www-data e permessi 755.
sudo chown -R www-data:www-data /var/simplesamlphp/
sudo chmod -R 755 /var/simplesamlphp/
Potresti chiedere perché il percorso deve essere in /var/simplesamlphp, perché la documentazione ufficiale è inserita qui, avrai bisogno di una configurazione aggiuntiva se la inserisci in un altro posto.
Quindi configura nginx e punta l’indice a /www nella sua cartella. Se usi Apache, trova la configurazione nella documentazione ufficiale.
upstream saml-php-handler {
server unix:/run/php/php8.0-fpm.sock;
}
server {
listen 443 ssl;
server_name YOUR_SAML_DOMAIN;
index index.php;
ssl_certificate YOUR_CERT;
ssl_certificate_key YOUR_KEY;
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;
# Must be prepended with the baseurlpath
fastcgi_param SCRIPT_NAME /simplesaml$phpfile;
fastcgi_param PATH_INFO $pathinfo if_not_empty;
}
}
}
Quindi aggiorna la tua sorgente:
sudo apt update
Quindi installa il pacchetto software:
sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached
Nota: qui è richiesto di installare in base alla tua versione di php. Ad esempio, se stai usando php8.0, dovrai aggiungere “8.0” dopo tutti i “php”. Come: php8.0-xml
Riavvia Nginx per attivare la nuova estensione php dopo che l’installazione è stata completata:
sudo systemctl restart Nginx
Quindi genera un salt:
openssl rand -base64 32
Copia questo salt.
Quindi apri /var/simplesamlphp/config/config.php
'auth.adminpassword',YOUR_PASSWORD;
'secretsalt',YOUR_SALT;
'technicalcontact_name',YOUR_NAME;
'technicalcontact_email' ,YOUR_EMAIL;
'language.default',CHANGE_TO_YOUR_LANGUAGE;
'timezone',CHANGE_TO_YOUR_AREA;
'enable.saml20-idp' => true,
Quindi apri https://YOUR_SAML_DOMAIN/simplesaml, in teoria il tuo SimpleSAMLphp dovrebbe funzionare ora.
Quindi installa Composer.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/bin/composer
Quindi dovresti digitare composer per eseguire.
Vai in /var/simplesamlphp, modifica composer.json, cambia la versione in dev-master.
Il motivo per cui lo facciamo qui è perché il modulo discourse-simplesamlphp richiede la versione “dev-master”, tuttavia la sua versione predefinita è un numero, quindi dobbiamo cambiare la versione in “dev-master”.
Quindi inizia a installare questo modulo.
composer require swcc/simplesamlphp-module-authdiscourse dev-master --ignore-platform-reqs
Il parametro “–ignore-platform-reqs” serve per evitare che la tua versione di php non corrisponda ai requisiti.
Ora dovresti vedere composer iniziare a installare swcc/simplesamlphp-module-authdiscourse.
Dopo che l’installazione è completata, inserisci:
touch /var/simplesamlphp/modules/authdiscourse/enable
Per abilitare questo plugin.
Quindi abilita le opzioni “segreti del provider connect discourse” e “abilita il provider connect discourse” nel tuo forum Discourse.
In “segreti del provider connect discourse” inserisci il tuo dominio SAML e un segreto sso.
Quindi modifica config/authsources.php nella cartella simplesamlphp:
<?php
$config = [
// This is a authentication source which handles admin authentication.
'admin' => [
'core:AdminPassword',
],
// This is the authentication source using the Discourse authentication.
'discourse-sso' => [
'authdiscourse:Discourse',
'url' => 'https://discourse.your-domain.org',
'secret' => '<your-sso-secret>',
],
];
Devi aggiungere questa parte nel posto giusto:
'discourse-sso' => [
'authdiscourse:Discourse',
'url' => 'YOUR_DISCOURSE_DOMAIN',
'secret' => 'DISCOURSE_SSO_SECRET',
],
Per consentire a SimpleSAMLphp di utilizzare discourse-sso per l’autenticazione.
Infine, apri https://YOUR_SAML_DOMAIN/simplesaml/module.php/core/authenticate.php?as=discourse-sso
OPPURE
Apri https://YOUR_SAML_DOMAIN/simplesaml/ quindi fai clic su autenticazione e poi su discourse-sso per testare.
Se restituisce le informazioni corrette, significa che hai configurato correttamente SimpleSAMLphp per connettersi al tuo Discourse.
Ora devi configurare le impostazioni del tuo IDP.
Innanzitutto, devi generare un certificato per l’IDP utilizzando:
openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out YOUR_SAML_DOMAIN.crt -keyout YOUR_SAML_DOMAIN.pem
Se lo generi nella directory principale, puoi vedere il tuo nuovo certificato lì.
Quindi sposta il tuo certificato dove vuoi, quindi assegnali all’utente www-data e permessi 755.
chown -R www-data:www-data /YOUR_CERT_PATH
chmod -R 755 /YOUR_CERT_PATH
Infine, modifica il percorso del tuo certificato e la tua sorgente di autenticazione in metadata/saml20-idp-hosted.php.
<?php
$metadata['__DYNAMIC:1__'] = [
/*
* The hostname for this IdP. This makes it possible to run multiple
* IdPs from the same configuration. '__DEFAULT__' means that this one
* should be used by default.
*/
'host' => '__DEFAULT__',
/*
* The private key and certificate to use when signing responses.
* These are stored in the cert-directory.
*/
'privatekey' => '/YOUR_KEY_PATH',
'certificate' => '/YOUR_CERT_PATH',
/*
* The authentication source which should be used to authenticate the
* user. This must match one of the entries in config/authsources.php.
* NOTICE: YOU NEED TO CHANGE THE AUTH METHOD TO "discourse-sso"
*/
'auth' => 'discourse-sso',
];
Ora il tuo SimpleSAMLphp utilizza Discourse come backend del database utenti, come IDP SAML, fornendo un protocollo di accesso SAML standard.
ID IDP (URI): https://YOUR_SAML_DOMAIN/simplesaml/saml2/idp/metadata.php
URL di destinazione (utilizzato per inviare il requisito di identità SP): https://YOUR_SAML_DOMAIN/simplesaml/saml2/idp/SSOService.php
Certificato X509: https://YOUR_SAML_DOMAIN/simplesaml/module.php/saml/idp/certs.php/idp.crt
Oppure per quei SP che ti consentono di caricare direttamente il file dei metadati IDP, puoi scaricare i metadati IDP: https://YOUR_SAML_DOMAIN/simplesaml/saml2/idp/metadata.php
Tutto fatto. Tutto dovrebbe funzionare ora.
Divertiti~
Successivamente potrei introdurre come connettere SimpleSAMLphp basato su Discourse come metodo di accesso SAML di NextCloud.
Qualsiasi cosa non compresa può essere risposto a questo post o contattami tramite admin@rail.moe.