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.