| Zusammenfassung | Discourse OAuth2 Basic unterstützt grundlegende OAuth2-Anbieter, sofern diese einen JSON-API-Endpunkt bereitstellen, über den Benutzerdaten per Token abgerufen werden können. | |
| Installationsanleitung | Dieses Plugin ist im Discourse-Kern enthalten. Eine separate Installation ist nicht erforderlich. |
Funktionen
Dieses Plugin ermöglicht die Nutzung eines grundlegenden OAuth2-Anbieters als Authentifizierungsmethode für Discourse. Es sollte mit vielen Anbietern funktionieren, wobei zu beachten ist, dass diese einen JSON-Endpunkt zur Abfrage von Informationen über den sich anmeldenden Benutzer bereitstellen müssen.
Dies ist vor allem für Personen nützlich, die Login-Anbieter verwenden, die nicht sehr verbreitet sind. Wenn Sie Google, Facebook oder Twitter nutzen möchten, sind diese bereits integriert, und Sie benötigen dieses Plugin nicht. Weitere Login-Anbieter finden Sie auch in unserem Github-Repo.
Konfiguration
Grundkonfiguration
- Registrieren Sie zunächst Ihre Discourse-Anwendung bei Ihrem OAuth2-Anbieter. Dazu wird eine Redirect-URI benötigt, die wie folgt lautet:
http://DISCOURSE_HOST/auth/oauth2_basic/callback
Ersetzen Sie
DISCOURSE_HOSTdurch den entsprechenden Wert und stellen Sie sicher, dass Siehttpsverwenden, falls aktiviert. Der OAuth2-Anbieter sollte Ihnen eineclient IDund einsecretsowie einige URLs bereitstellen.
- Besuchen Sie Ihren Admin-Bereich → Einstellungen → OAuth2-Login und füllen Sie die Grundkonfiguration für den OAuth2-Anbieter aus:
oauth2_enabled- aktivieren Sie diese Option, um die Funktion zu ermöglichenoauth2_client_id- die Client-ID Ihres Anbietersoauth2_client_secret- das Client-Secret Ihres Anbietersoauth2_authorize_url- die Autorisierungs-URL Ihres Anbietersoauth2_token_url- die Token-URL Ihres Anbieters.
Wenn Sie die Werte für die oben genannten Einstellungen nicht herausfinden können, konsultieren Sie die Entwicklerdokumentation Ihres Anbieters oder wenden Sie sich an deren Kundensupport.
Konfiguration des JSON-Benutzerendpunkts
Discourse kann nun einen Autorisierungstoken von Ihrem OAuth2-Anbieter empfangen. Leider benötigt Discourse weitere Informationen, um die Authentifizierung abschließen zu können.
Wir benötigen einen API-Endpunkt, der kontaktiert werden kann, um Benutzerinformationen basierend auf dem Token abzurufen.
Beispielsweise bietet der OAuth2-Anbieter SoundCloud eine solche URL. Wenn Sie einen OAuth2-Token für SoundCloud haben, können Sie eine GET-Anfrage an https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN senden und erhalten ein JSON-Objekt mit Informationen über den Benutzer.
Um dies in Discourse zu konfigurieren, müssen wir den Wert der Einstellung oauth2_user_json_url festlegen. In diesem Fall geben wir folgenden Wert ein:
https://api.soundcloud.com/me?oauth_token=:token
Der Teil mit :token weist Discourse an, diesen Wert durch den Autorisierungstoken zu ersetzen, der bei Abschluss der Authentifizierung empfangen wurde.
Es gibt noch einen letzten Schritt. Wir müssen Discourse mitteilen, welche Attribute im empfangenen JSON verfügbar sind. Hier ist eine Beispielantwort von SoundCloud:
{
"id": 3207,
"permalink": "jwagener",
"username": "Johannes Wagener",
"uri": "https://api.soundcloud.com/users/3207",
"permalink_url": "http://soundcloud.com/jwagener",
"avatar_url": "http://i1.sndcdn.com/avatars-000001552142-pbw8yd-large.jpg?142a848",
"country": "Germany",
"full_name": "Johannes Wagener",
"city": "Berlin"
}
Die Variablen oauth2_json_user_id_path, oauth2_json_username_path, oauth2_json_name_path und oauth2_json_email_path sollten so gesetzt werden, dass sie auf die entsprechenden Attribute im JSON zeigen.
Das einzige erforderliche Attribut ist die id – wir benötigen diese, um bei zukünftigen Anmeldungen des Benutzers das richtige Konto abrufen zu können. Die anderen sind sehr hilfreich, falls verfügbar – sie beschleunigen den Registrierungsprozess für den Benutzer, da diese Felder im Formular automatisch ausgefüllt werden.
So habe ich die JSON-Pfad-Einstellungen konfiguriert:
oauth2_json_user_id_path: 'id'
oauth2_json_username_path: 'permalink'
oauth2_json_name_path: 'full_name'
Ich habe permalink verwendet, da dies Discourses Erwartung für einen Benutzernamen näher kommt als der username im JSON. Beachten Sie, dass ich den E-Mail-Pfad weggelassen habe: SoundCloud stellt keine E-Mail-Adresse bereit, sodass der Benutzer diese bei der ersten Registrierung auf Discourse angeben und verifizieren muss.
Wenn die gewünschten Eigenschaften Ihres JSON-Objekts verschachtelt sind, können Sie Punkte verwenden. Wenn die API beispielsweise eine andere Struktur zurückgibt wie:
{
"user": {
"id": 1234,
"email": {
"address": "test@example.com"
}
}
}
könnten Sie user.id für oauth2_json_user_id_path und user.email.address für oauth2_json_email_path verwenden.
Enthält der Schlüssel selbst Punkte, müssen Sie ihn in doppelte Anführungszeichen setzen oder die Punkte mit einem Backslash escapen. Zum Beispiel, gegeben dieses JSON:
{
"example.com/uid": "myuid"
}
würden Sie den Pfad als example\.com/uid oder "example.com/uid" angeben.
Wenn Sie
oauth2_json_email_pathsetzen, muss der OAuth2-Anbieter bestätigen, dass der Benutzer diese E-Mail-Adresse besitzt. Unterlassung hiervon kann zu einer Übernahme des Kontos in Discourse führen!
Von uns gehostet? Dieses Plugin ist in unseren Business- und Enterprise-Plänen verfügbar. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
Müssen Sie Benutzerregistrierungen automatisieren? Siehe Auto-provisioning user accounts when SSO is enabled