Discourse OAuth2 Grundlagen

:discourse2: Zusammenfassung Discourse OAuth2 Basic unterstützt grundlegende OAuth2-Anbieter, sofern diese über einen JSON-API-Endpunkt verfügen, über den Benutzerdaten per Token abgerufen werden können.
:open_book: Installationsanleitung Dieses Plugin ist im Discourse-Kern enthalten. Eine separate Installation ist nicht erforderlich.

Funktionen

Dieses Plugin ermöglicht die Verwendung eines grundlegenden OAuth2-Anbieters als Authentifizierungsmethode für Discourse. Es sollte mit vielen Anbietern funktionieren, wobei jedoch vorausgesetzt wird, dass diese einen JSON-Endpunkt zur Abfrage von Informationen über den sich anmeldenden Benutzer bereitstellen.

Dies ist hauptsächlich 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 in unserem Github-Repo.

Konfiguration

Grundkonfiguration

  1. Registrieren Sie zunächst Ihre Discourse-Anwendung bei Ihrem OAuth2-Anbieter. Dieser wird eine Redirect URI benötigen, die wie folgt lautet:

    http://DISCOURSE_HOST/auth/oauth2_basic/callback

:information_source: Ersetzen Sie DISCOURSE_HOST durch den entsprechenden Wert und stellen Sie sicher, dass Sie https verwenden, falls aktiviert. Der OAuth2-Anbieter sollte Ihnen eine client ID und ein secret sowie einige URLs bereitstellen.

  1. Besuchen Sie AdminEinstellungenOAuth2-Login und füllen Sie die Grundkonfiguration für den OAuth2-Anbieter aus:
  • oauth2_enabled - aktivieren Sie diese Option, um die Funktion zu ermöglichen
  • oauth2_client_id - die Client-ID Ihres Anbieters
  • oauth2_client_secret - das Client-Secret Ihres Anbieters
  • oauth2_authorize_url - die Autorisierungs-URL Ihres Anbieters
  • oauth2_token_url - die Token-URL Ihres Anbieters.

:information_source: 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.

Konfigurieren des JSON-Benutzer-Endpunkts

Discourse kann nun ein Autorisierungstoken von Ihrem OAuth2-Anbieter empfangen. Leider benötigt Discourse weitere Informationen, um die Authentifizierung abzuschließen.

Wir benötigen einen API-Endpunkt, der kontaktiert werden kann, um Informationen über den Benutzer basierend auf dem Token abzurufen.

Beispielsweise bietet der OAuth2-Anbieter SoundCloud eine solche URL. Wenn Sie ein 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 zurück.

Um dies in Discourse zu konfigurieren, müssen wir den Wert der Einstellung oauth2_user_json_url festlegen. In diesem Fall geben wir den folgenden Wert ein:

https://api.soundcloud.com/me?oauth_token=:token

Der Teil mit :token weist Discourse an, diesen Wert durch das Autorisierungstoken zu ersetzen, das 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 eingestellt 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 aufrufen zu können. Die anderen sind nützlich, falls verfügbar – sie beschleunigen den Registrierungsprozess für den Benutzer, da sie im Formular vorausgefü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 es Discourses Erwartungen an einen Benutzernamen eher entspricht als der username in deren 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 also eine andere Struktur wie diese zurückgibt:

{
  "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.

Wenn der Schlüssel selbst Punkte enthält, müssen Sie ihn in doppelte Anführungszeichen setzen oder die Punkte mit einem Backslash maskieren. Zum Beispiel bei diesem JSON:

{
  "example.com/uid": "myuid"
}

würden Sie den Pfad als example\.com/uid oder "example.com/uid" angeben.

Synchronisierung von Gruppen und Benutzerfeldern

  • oauth2_json_groups_path: JSON-Pfad, der die Gruppen des Benutzers als Array von Strings enthält. Nach der ersten Anmeldung des Benutzers stehen diese Gruppen im Abschnitt „Zugeordnete Gruppen“ der Discourse-Gruppeneinstellungen zur Auswahl. Leer lassen, um die Gruppensynchronisierung zu deaktivieren.

  • oauth2_user_field_mappings: Zuordnungen von JSON-Pfaden, die in Discourse-Benutzerfeldern gespeichert werden. Benutzerfelder werden durch ihre numerische ID identifiziert, die in der URL gefunden werden kann, wenn sie über das Admin-Panel bearbeitet werden.

:warning: Wenn Sie oauth2_json_email_path festlegen, muss der OAuth2-Anbieter bestätigen, dass der Benutzer diese E-Mail-Adresse besitzt. Das Unterlassen davon kann zu einer Übernahme von Konten in Discourse führen!

:discourse2: Von uns gehostet? Dieses Plugin ist in unseren Business- und Enterprise-Plänen verfügbar. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion

:spiral_notepad: Müssen Sie Benutzerregistrierungen automatisieren? Siehe Auto-provisioning user accounts when SSO is enabled

28 „Gefällt mir“
Keycloak with Discourse
Discourse SSO with OAuth2
Login from another user database
Shopify Integration
How can we enable Auth0 SSO in Discourse
OAuth2 integration with Drupal
OAuth connection of discourse
Login flow (Flask -> Discourse -> Flask) with OAuth
How to use Oauth2 service provided by discourse?
How to login to discourse from external website
Is "partial" SSO possible?
Set up Salesforce auth using OAuth2 basic support plugin
How to force users link phone number when they using Discourse?
OAuth2 Custom Redirects Plugin
Custom Login / Registration from another API
Login on discourse using mastodon credentials
Open source will support customized provider SSO
Oauth2 with fusionauth cert issues
Auto-provisioning user accounts when SSO is enabled
Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin
SSO with TownNews CMS
What is supposed to go in “DISCOURSE_HOST”?
Custom Provider log-in with OAuth only sign-up/log-in
Discord, Google and Microsoft login, is oAuth2 enough?
Populating email field on login page
CodeBerg support
Gate our community to just members of our Shopify site?
Intergrate Discourse with keycloak
Integration into custom auth system where emails are not unique?
Twitter login doesn't work on meta
Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)
Question about Docker Manager?
Discourse OpenID Connect (OIDC)
🧩 How to Build an Android App User Community with Discourse? [HeyApks Project]
Bundling more popular plugins with Discourse core
Drupal 8 and Discourse shared SSO
Discourse for self hosting
Discourse + Intercom (Current User Id)
Error during SSO integration - Wholistic Minds
ADFS Authentication
Pulling user auth0 sub from OAuth2.0 plugin
Suggestion for improving Integrated Authentication development
Github and Twitter Login/Sign-Up Functionality?
Automatically creating a user when logging in with Webflow/Memberspace
Switching out authentication for a passwordless alternative
Removing Yahoo login from Core, and deprecating OpenID 2.0
Shopify Integration
SSO and Auth0
Migrate a Jive Clearspace forum to Discourse