Richten Sie Ihren DiscourseConnect(DiscourseSSO) auf SimpleSAMLphp ein, um Ihr Discourse-Forum als SAML IDP (Identity Provider) zu verwenden

Discourse hat DiscourseConnect integriert, mit dem Sie Ihr Discourse in einen SSO-Anbieter umwandeln können. Sie finden dies im Artikel „Discourse als Identitätsanbieter verwenden (SSO, DiscourseConnect)“. Was es jedoch bietet, ist kein Standardprotokoll wie SAML oder OAuth.

Daher müssen wir ein Modul verwenden, das von Paul B. im Discourse-Forum erstellt wurde. Dieses Modul ermöglicht es uns, DiscourseConnect mit SimpleSAMLphp zu verbinden und dann SimpleSAMLphp zu verwenden, um einen standardmäßigen SAML-Login-Dienstprotokoll bereitzustellen. Hier möchte ich ihm meinen großen Dank aussprechen, dass er dies ermöglicht hat. Sie können das Modul auch hier finden:

Nun beginnen wir mit der Anleitung.

Zuerst müssen wir SimpleSAMLphp konfigurieren.

Laden Sie zuerst SimpleSAMLphp herunter.

wget https://simplesamlphp.org/download?latest

Entpacken Sie es dann.

tar zxf download?latest

Verschieben Sie die Datei dann nach /var/simplesamlphp.

sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/

Geben Sie diesem Ordner dann den Benutzer www-data und die Berechtigung 755.

sudo chown -R www-data:www-data /var/simplesamlphp/
sudo chmod -R 755 /var/simplesamlphp/

Sie fragen sich vielleicht, warum der Pfad /var/simplesamlphp sein muss. Da die offizielle Dokumentation dies so vorsieht, benötigen Sie zusätzliche Konfigurationen, wenn Sie es an einem anderen Ort platzieren.

Konfigurieren Sie dann Nginx und leiten Sie den Index auf /www in seinem Ordner. Wenn Sie Apache verwenden, finden Sie die Konfiguration in der offiziellen Dokumentation.

upstream saml-php-handler {
    server unix:/run/php/php8.0-fpm.sock;
}

server {
        listen 443 ssl;
        server_name IHRE_SAML_DOMAIN;
        index index.php;
        ssl_certificate    IHR_ZERTIFIKAT;
        ssl_certificate_key    IHR_SCHLÜSSEL;
        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;
                # Muss mit der baseurlpath vorangestellt werden
                fastcgi_param SCRIPT_NAME /simplesaml$phpfile;
                fastcgi_param PATH_INFO $pathinfo if_not_empty;
            }
        }
}

Aktualisieren Sie dann Ihre Quellen:

sudo apt update

Installieren Sie dann die Softwarepakete:

sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached

Hinweis: Hier müssen Sie entsprechend Ihrer PHP-Version installieren. Wenn Sie beispielsweise PHP 8.0 verwenden, müssen Sie nach allen „php“ „8.0“ hinzufügen. Zum Beispiel: php8.0-xml

Starten Sie Nginx neu, um die neue PHP-Erweiterung nach Abschluss der Installation zu aktivieren:

sudo systemctl restart Nginx

Generieren Sie dann einen Salt:

openssl rand -base64 32

Kopieren Sie diesen Salt.

Öffnen Sie dann /var/simplesamlphp/config/config.php

'auth.adminpassword',IHR_PASSWORT;
'secretsalt',IHR_SALT;
'technicalcontact_name',IHR_NAME;
'technicalcontact_email' ,IHRE_EMAIL;
'language.default',ÄNDERN_ZU_IHRER_SPRACHE;
'timezone',ÄNDERN_ZU_IHREM_GEBIET;
'enable.saml20-idp' => true,

Öffnen Sie dann https://IHRE_SAML_DOMAIN/simplesaml. Theoretisch sollte Ihr SimpleSAMLphp jetzt funktionieren.

Installieren Sie dann Composer.

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/bin/composer

Dann sollten Sie composer eingeben, um es auszuführen.

Gehen Sie zu /var/simplesamlphp, bearbeiten Sie composer.json und ändern Sie die Version in dev-master.

Der Grund dafür ist, dass das Discourse-SimpleSAMLphp-Modul die Version „dev-master“ benötigt. Die Standardversion ist jedoch eine Zahl, daher müssen wir die Version in „dev-master“ ändern.

Installieren Sie dann dieses Modul.

composer require swcc/simplesamlphp-module-authdiscourse dev-master --ignore-platform-reqs

Der Parameter „–ignore-platform-reqs“ dient dazu, zu verhindern, dass Ihre PHP-Version nicht den Anforderungen entspricht.

Jetzt sollten Sie sehen, wie Composer mit der Installation von swcc/simplesamlphp-module-authdiscourse beginnt.

Nach Abschluss der Installation geben Sie Folgendes ein:

touch /var/simplesamlphp/modules/authdiscourse/enable

Um dieses Plugin zu aktivieren.



Aktivieren Sie dann die Optionen „Discourse Connect Provider Secrets“ und „Enable Discourse Connect Provider“ in Ihrem Discourse-Forum.

Geben Sie unter „Discourse Connect Provider Secrets“ Ihre SAML-Domain und ein SSO-Secret ein.

Bearbeiten Sie dann config/authsources.php im simplesamlphp-Ordner:

<?php
$config = [
    // Dies ist eine Authentifizierungsquelle, die die Admin-Authentifizierung behandelt.
    'admin' => [
        'core:AdminPassword',
    ],

    // Dies ist die Authentifizierungsquelle, die die Discourse-Authentifizierung verwendet.
    'discourse-sso' => [
      'authdiscourse:Discourse',
      'url' => 'https://discourse.your-domain.org',
      'secret' => 'IHR-SSO-SECRET',
    ],

];

Sie müssen diesen Teil an der geeigneten Stelle einfügen:

    'discourse-sso' => [
      'authdiscourse:Discourse',
      'url' => 'IHRE_DISCOURSE_DOMAIN',
      'secret' => 'DISCOURSE_SSO_SECRET',
    ],

Damit SimpleSAMLphp discourse-sso für die Authentifizierung verwenden kann.

Öffnen Sie schließlich https://IHRE_SAML_DOMAIN/simplesaml/module.php/core/authenticate.php?as=discourse-sso

ODER

Öffnen Sie https://IHRE_SAML_DOMAIN/simplesaml/ und klicken Sie dann auf Authentifizierung und dann auf discourse-sso, um zu testen.

Wenn korrekte Informationen zurückgegeben werden, bedeutet dies, dass Sie Ihr SimpleSAMLphp erfolgreich mit Ihrem Discourse verbunden haben.

Nun müssen Sie Ihre IDP-Einstellungen konfigurieren.

Zuerst müssen Sie ein Zertifikat für den IDP generieren mit:

openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out IHRE_SAML_DOMAIN.crt -keyout IHRE_SAML_DOMAIN.pem

Wenn Sie es im Stammverzeichnis generieren, sehen Sie Ihr neues Zertifikat dort.

Verschieben Sie dann Ihr Zertifikat an den gewünschten Ort, geben Sie ihm den Benutzer www-data und die Berechtigung 755.

chown -R www-data:www-data /IHR_ZERTIFIKATPFAD
chmod -R 755 /IHR_ZERTIFIKATPFAD

Bearbeiten Sie schließlich Ihren Zertifikatspfad und Ihre Authentifizierungsquelle in metadata/saml20-idp-hosted.php.

<?php
$metadata['__DYNAMIC:1__'] = [
    /*
     * Der Hostname für diesen IdP. Dies ermöglicht den Betrieb mehrerer
     * IdPs aus derselben Konfiguration. '__DEFAULT__' bedeutet, dass dieser
     * standardmäßig verwendet werden soll.
     */
    'host' => '__DEFAULT__',

    /*
     * Der private Schlüssel und das Zertifikat, die beim Signieren von Antworten verwendet werden.
     * Diese werden im Zertifikatverzeichnis gespeichert.
     */
    'privatekey' => '/IHR_SCHLÜSSELPFAD',
    'certificate' => '/IHR_ZERTIFIKATPFAD',
    /*
     * Die Authentifizierungsquelle, die zur Authentifizierung des
     * Benutzers verwendet werden soll. Diese muss mit einem der Einträge in config/authsources.php übereinstimmen.
     * HINWEIS: SIE MÜSSEN DIE AUTH-METHODE AUF "discourse-sso" ÄNDERN
     */
    'auth' => 'discourse-sso',
];

Jetzt verwendet Ihr SimpleSAMLphp Discourse als Backend für die Benutzerdatenbank und fungiert als SAML-IDP, der ein standardmäßiges SAML-Login-Protokoll bereitstellt.

IDP ID (URI): https://IHRE_SAML_DOMAIN/simplesaml/saml2/idp/metadata.php
URL-Ziel (wird verwendet, um SP-Identitätsanforderungen zu senden): https://IHRE_SAML_DOMAIN/simplesaml/saml2/idp/SSOService.php
X509-Zertifikat: https://IHRE_SAML_DOMAIN/simplesaml/module.php/saml/idp/certs.php/idp.crt
Oder für SPs, die den direkten Upload der IDP-Metadatendatei zulassen, können Sie die IDP-Metadaten herunterladen: https://IHRE_SAML_DOMAIN/simplesaml/saml2/idp/metadata.php

Alles erledigt. Alles sollte jetzt funktionieren.

Viel Spaß~

Als Nächstes werde ich vielleicht vorstellen, wie SimpleSAMLphp, das von Discourse betrieben wird, als NextCloud-SAML-Login-Methode verwendet werden kann.

Alles, was missverstanden wurde, kann in diesem Beitrag beantwortet oder per E-Mail an admin@rail.moe kontaktiert werden.

11 „Gefällt mir“

Vielen Dank für diese Anleitung! Ich bin tatsächlich sehr daran interessiert, diesen Wechsel vorzunehmen! Ich habe nicht vollständig verstanden, wie ich das einrichten kann, aber ich werde es versuchen, wenn ich die Gelegenheit dazu habe.

Hallo, hat das kürzlich jemand ausprobiert? Ich verwende Discourse 3.3 und SimpleSAMLphp 2.2.1 und kann es nicht zum Laufen bringen. Ich bin beim Testschritt. Der Link funktioniert nicht mehr, aber ich habe eine Testoption im SimpleSAML-Admin-Panel gefunden. Aber ich bekomme hier diese Ausnahme:

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)

Ich habe alle Schritte mehrmals überprüft, aber das Modul wurde seit 4 Jahren nicht mehr aktualisiert und ich befürchte, dass es nicht mehr kompatibel ist. Benutzt das noch jemand?

Welches Protokoll verwendet DiscourseConnect also? Ich habe einen OAuth2-Client ausprobiert, aber festgestellt, dass die Parameter nicht ganz dieselben sind :frowning:

1 „Gefällt mir“