Configura il tuo DiscourseConnect(DiscourseSSO) con SimpleSAMLphp, usa il tuo forum Discourse come SAML IDP (Provider di Identità)

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.

11 Mi Piace

Grazie per questa guida! Sono davvero interessato a fare questo passaggio! Non avevo capito appieno come impostarlo, ma ci proverò quando ne avrò l’occasione.

Ehi, qualcuno ha provato questo di recente? Sto usando discourse 3.3 e simpleSAMLphp 2.2.1 e non riesco a farlo funzionare. Sono alla fase di test. Il link non funziona più, ma ho trovato un’opzione di test nel pannello di amministrazione di simplesamls. Ma sto ricevendo questa eccezione qui:

SimpleSAML\Error\Error: UNHANDLEDEXCEPTION
Backtrace:
3 src/SimpleSAML/Error/ExceptionHandler.php:35 (SimpleSAML\Error\ExceptionHandler::customExceptionHandler)
2 vendor/symfony/error-handler/ErrorHandler.php:535 (Symfony\Component\ErrorHandler\ErrorHandler::handleException)
1 vendor/symfony/error-handler/ErrorHandler.php:627 (Symfony\Component\ErrorHandler\ErrorHandler::handleFatalError)
0 [builtin] (N/A)
Caused by: Symfony\Component\ErrorHandler\Error\FatalError: Compile Error: Declaration of SimpleSAML\Module\authdiscourse\Auth\Source\Discourse::authenticate(&$state) must be compatible with SimpleSAML\Auth\Source::authenticate(array &$state): void
Backtrace:
0 modules/authdiscourse/lib/Auth/Source/Discourse.php:73 (N/A)

Ho controllato tutti i passaggi più volte, ma il modulo non è stato aggiornato da 4 anni e temo che non sia più compatibile. Qualcuno lo sta ancora usando?

Quindi, quale protocollo utilizza DiscourseConnect? Stavo provando un client oAuth2 ma mi sono reso conto che i parametri non sono proprio gli stessi :frowning:

1 Mi Piace