Wordpress SSO und Patreon-Login

Hallo nochmal! Ich hatte eine Frage. Ein Kunde von mir möchte seine Mitgliedschaft schrittweise von Patreon auf WordPress (über WooCommerce Memberships) umziehen. Ich weiß, dass dies möglich ist, basierend auf anderen Forenbeiträgen.

Meine Frage ist jedoch: Wenn wir SSO mit WordPress als Anbieter aktivieren, ist WordPress dann der EINZIGE Weg, sich in den Foren anzumelden? Würde die Aktivierung von SSO mit WordPress verhindern, dass Patreon-Nutzer sich über ihre Patreon-Konten anmelden? Oder ist es möglich, beides parallel zu betreiben?

Entschuldigung, falls das verwirrend ist oder dies nicht der richtige Ort für diese Frage.

Vielen Dank im Voraus!

Ja, das erste S in SSO steht für Single. WordPress wird zur autoritativen Instanz für alle Authentifizierungen.

Das heißt jedoch: Wenn Patreon die E-Mail-Adressen der Nutzer bereitstellt, können diese sich bei WordPress registrieren, um wieder Zugriff auf ihre Konten zu erhalten, sofern sie dieselbe Adresse verwenden.

Sie können Benutzern auch ermöglichen, sich über Patreon bei Ihrer WordPress-Seite anzumelden, und zwar mit Patreon WordPress – WordPress plugin | WordPress.org. Ich habe dies nicht getestet, aber es sollte möglich sein, dass sich Benutzer über Patreon bei WordPress anmelden und gleichzeitig eine SSO-Anmeldung zwischen WordPress und Discourse besteht. Falls Sie dies ausprobieren und Probleme haben, es zum Laufen zu bringen, lassen Sie es uns bitte wissen.

Hallo! Ich habe dieses Setup getestet und es funktioniert grundsätzlich! :slight_smile:
Das einzige Problem, das ich gefunden habe, ist, dass es nach einer erfolgreichen Anmeldung nicht zu Discourse weiterleitet, sondern den Benutzer zurück zu WordPress bringt. Der Benutzer muss manuell zu Discourse gehen und dann erneut auf die Schaltfläche “Anmelden” klicken, um sich zu registrieren. Ich frage mich, ob sich das irgendwie beheben lässt?

Ich habe ein Video aufgenommen, um zu zeigen, wie es funktioniert –

Danke, dass du das ausprobiert hast. Es klingt so, als würden die SSO-Parameter, die für die Anmeldung des Benutzers bei Discourse erforderlich sind, während des Patreon-Anmeldevorgangs entfernt. Falls dies der Fall ist, gibt es wahrscheinlich keine Möglichkeit, das Problem zu beheben.

Ich frage mich, ob das durch eine Änderung des Wordpress-Patreon-Plugins behoben werden kann? Lohnt es sich, die Autoren zu kontaktieren? :slight_smile:

Wenn die Ursache des Problems das ist, was ich vermute, könnte eine Anpassung des WordPress-Patreon-Plugins das Problem beheben. Meiner Einschätzung nach entfernt das WordPress-Patreon-Plugin die sso- und sig-Abfrageparameter, die mit der Patreon-Anmeldeanfrage gesendet werden. Es könnte sich lohnen, die Entwickler dieses Plugins zu kontaktieren, um das Problem zu besprechen.

Bevor Sie dies tun, sollten Sie bestätigen, dass das Klicken auf die Schaltfläche „Anmelden

Hallo! Ich habe einen Bericht an die Entwickler des Patreon-Plugins gesendet – Redirecting not working when using together with Discourse SSO - Wordpress Plugin - Patreon Developers

Ja, das kann ich bestätigen:

  • Das Klicken auf den Anmelden-Button in Discourse für einen Benutzer, der aktuell nicht in WordPress angemeldet ist, führt diesen zur WordPress-Anmeldeseite:white_check_mark: JA

  • Wenn der Benutzer dann die Patreon-Anmeldungsoption auswählt, wird er in WordPress angemeldet:white_check_mark: JA

  • aber nicht in Discourse angemeldet:white_check_mark: JA – wie im obigen Video bei 0:32 zu sehen ist, ist der Benutzer nicht angemeldet.

Okay, ich habe einen Workaround gefunden, der das Problem mit dem Patreon-Login „löst“. Die Anweisungen findest du unten. :slight_smile:

Du benötigst:

  • Ein beliebiges Plugin, das einen Shortcode zum Anzeigen eines Login-Formulars bereitstellt (ich habe WooCommerce auf meiner Website installiert und verwende daher den Shortcode [woocommerce_my_account], der genau das für nicht eingeloggte Benutzer tut).
  • Das Members-Plugin, das die Shortcodes [members_logged_in] und [members_not_logged_in] bereitstellt, um Inhalte je nach Login-Status des Benutzers ein- oder auszublenden. Du kannst auch ein anderes Plugin mit ähnlicher Shortcode-Funktionalität verwenden.
  • Das Shortcode Redirect-Plugin.

Die Idee besteht darin, eine spezielle Seite zu erstellen, die für nicht eingeloggte Benutzer ein Login-Formular (und den Patreon-Login-Button) anzeigt. Ist der Benutzer bereits eingeloggt, soll er auf die URL https://community.morevnaproject.org/session/sso?return_path=%2F weitergeleitet werden.
(Offensichtlich möchtest du „community.morevnaproject.org“ durch deine eigene Domain ersetzen).

Meine spezielle Login-Seite hat folgenden Inhalt:

[members_not_logged_in]
   [woocommerce_my_account]
   [patreon_login_button]
[/members_not_logged_in]
[members_logged_in]
   [redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']
[/members_logged_in]

(Du kannst es hier live sehen – Log In / Register — Morevna Project)

Anschließend musst du nur noch das WP-Discourse-Plugin so konfigurieren, dass es diese Seite für SSO verwendet –

Wenn ein Benutzer in Discourse auf die Schaltfläche „Anmelden“ klickt, wird er auf meine spezielle WordPress-Seite weitergeleitet. Da der Benutzer noch nicht eingeloggt ist, wird das Login-Formular angezeigt. Klickt der Benutzer auf die Schaltfläche „Mit Patreon anmelden“, wird er zur Autorisierung zu Patreon weitergeleitet. Nach erfolgreicher Autorisierung wird er zurück auf meine spezielle Seite geleitet. Da der Benutzer nun eingeloggt ist, wird der Shortcode „redirect“ aktiviert:

[redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']

…und der Benutzer wird erfolgreich zurück zu den Discourse-Foren weitergeleitet.

Der Teil session/sso?return_path=%2F am Ende der URL ist erforderlich; andernfalls erkennt Discourse den Benutzer nach der Weiterleitung nicht als eingeloggt.

Das war’s! Ich hoffe, das hilft anderen Benutzern, die auf ihrer Website WordPress SSO mit Patreon-Login nutzen möchten. :slight_smile:

Gute Arbeit beim Herausfinden dessen :+1:

Ich möchte nicht von deiner geleisteten Arbeit ablenken, aber mein erster Eindruck ist, dass du an dieser Stelle einen externen Authentifizierungsdienst (wie okta.com oder auth0.com) in Betracht ziehen solltest. Wann immer du den Punkt erreichst, an dem du drei verschiedene Dienste (z. B. Patreon, WordPress und Discourse) verknüpfen musst, um eine einmalige Authentifizierung in einem Schritt zu erreichen, ist das ein Zeichen dafür, dass du eine dedizierte Authentifizierungslösung in Betracht ziehen solltest. Unabhängig davon, ob du es auf irgendeine Weise schaffen kannst, besteht hier ein nicht zu vernachlässigendes langfristiges Risiko, dass deine Lösung versagt oder nicht in allen Fällen funktioniert.

Wenn du diesen Weg dennoch gehen möchtest, habe ich einige Vorschläge, aber mit dem fairen Hinweis, dass dies etwas technisch wird. Ich füge diese hier teilweise hinzu, falls jemand anders darauf stößt und dies weiterverfolgen möchte.

Ich habe mir kurz den Patreon WordPress-Plugin-Code angesehen, und es sieht so aus, als ob ihr OAuth-Flow einen Schlüssel/Wert für final_redirect_uri im state-Parameter akzeptiert. Dies würde es ermöglichen, direkt von der Patreon-Authentifizierung zum Discourse SSO zu wechseln, wodurch sowohl die oben erwähnten Plugins „Members“ als auch „Redirect“ überflüssig werden und Probleme, die bei diesem Ansatz auftreten könnten, umgangen werden.

Viele Authentifizierungsdienste haben eine Version des final_redirect_uri-Parameters, also einen Parameter, der es ermöglicht, das Ziel zu ändern, zu dem der Benutzer nach der Authentifizierung weitergeleitet wird. Wenn du dies liest, weil du versuchst, dasselbe Problem mit einem anderen Dienst (also nicht Patreon) zu lösen, und du dich auch dafür entschieden hast, dass meine Warnung vor der Verbindung von drei verschiedenen Diensten hier nicht zutrifft, dann ist dies der Punkt, an dem du suchen solltest.

Das bedeutet, du möchtest, dass der Shortcode, der den Patreon-Login-Button generiert, ein final_redirect_uri als Argument akzeptiert, das dann an die endgültige von Patreon verwendete Login-URL weitergegeben wird. Wenn man sich den Patreon WordPress-Plugin-Code ansieht, ist das ein machbarer Vorschlag. Um dir einen Eindruck zu geben, sieht die relevante Funktion, die den Patreon-URL generiert, so aus:

Patreon_Frontend::patreonMakeLoginLink(false, array( 'final_redirect_uri' => # ) );

Im Grunde ist der Code bereits teilweise so eingerichtet, dass er ein benutzerdefiniertes final_redirect_uri verarbeiten kann. Ich kann verstehen, warum die Entwickler des Patreon WordPress-Plugins dies vielleicht nicht hinzufügen möchten, aber wenn du dich sicher genug fühlst, das hier Beschriebene zu erläutern, könnte es sich lohnen, ein Issue in ihrem GitHub-Repository zu erstellen. Falls das nicht klappt, kannst du die oben erwähnte Funktion verwenden, um selbst einen Link zu generieren und deinen eigenen Button zu erstellen (oder einen WordPress-Developer damit beauftragen).

Nur eine kleine Anmerkung zur Konstruktion der SSO-URL: Es ist etwas klarer, dies zu verwenden:

https://discourse.example.com/session/sso?return_path=/

anstatt

https://discourse.example.com/session/sso?return_path=%2F

Der letzte Teil, return_path, ist der Pfad, zu dem der Benutzer in Discourse nach dem Login weitergeleitet wird. Wenn es / ist, wird er zur Forum-Startseite geleitet. Weitere Informationen zur Konstruktion von SSO-URLs findest du unter WP Discourse Tipps und Tricks.

+1 Ja, es besteht ein Risiko! :slight_smile:

Wow, vielen Dank für die detaillierten Anweisungen! Also ergibt es Sinn, den Shortcode [patreon_login_button] so zu ändern, dass er den Parameter final_redirect_uri akzeptiert, und einen PR in deren GitHub-Repository einzureichen. Nochmals vielen Dank, dass Sie sich die Zeit genommen haben, das zu erklären!