Ich arbeite gerade an einem Prototyp für einen Kunden. Eine der erforderlichen Funktionen ist die Integration in ein internes Benutzerauthentifizierungs- / Registrierungssystem.
Dieses System fungiert als autorisierende Benutzerdatenbank und bietet eine REST-Schnittstelle zum Erstellen neuer Benutzer und zum Authentifizieren gültiger Benutzer.
Ich muss in der Lage sein, neue Benutzer in WP zu erstellen und als Teil dieses Prozesses die externe Authentifizierungs-API aufzurufen, um diesen Benutzer entweder zu erstellen oder zu validieren.
Eine Person, die ein gültiger Benutzer ist, der WP jedoch nicht bekannt ist, sollte sich zum Kommentieren anmelden können, ohne sich selbst auf der WP-Site registrieren zu müssen.
Eine Person, die auf der gesamten Website angemeldet ist, sollte auch automatisch bei WordPress angemeldet sein.
Ich denke, das Folgende ist der richtige Weg.
Für (1) - gibt es einen Registrierungshaken, den ich verwenden kann?
Für (2) - ich gehe davon aus, dass ich den Authentifizierungsfilter einhänge - dh, wenn jemand versucht, sich anzumelden, fange ich das ein, rufe das externe System an und verarbeite dann entweder die WP-Anmeldung oder leite sie zum Registrierungsprozess weiter, wo ( 1) nimmt oer.
Für (3) - lesen Sie das Login-Cookie auf der Hauptseite und fahren Sie mit (2) fort.
Ich denke, ich muss auch einen Datensatz in die Benutzer- und Usermeta-Tabelle einfügen.
Ist das oben Gesagte sinnvoll? Habe ich nicht über etwas nachgedacht? Jeder hat irgendwelche guten Ressourcen, um dabei zu helfen (@hakre - ich habe gesehen, dass Sie daran gearbeitet haben !!).
Aktualisieren
Ich drücke meinen Kopf immer noch ein bisschen dagegen, im Wesentlichen versuche ich, mich in den Authentifizierungsfilter einzuklinken und dies zu verwenden, um:
- Überprüfen Sie, ob ein Anmeldecookie für die 'Master'-Site festgelegt ist, und überprüfen Sie gegebenenfalls die Authentifizierungs-API, und erzwingen Sie bei Gültigkeit eine WP-Anmeldung mit
wp_signon()
den im Master-Site-Cookie enthaltenen Informationen (E-Mail und Hash-Passwort). als Anmeldeinformationen für WP - Wenn das Cookie nicht gesetzt ist, leiten Sie zur Master-Site-Anmeldeseite um und erhalten Sie entweder eine Anmeldung / Registrierung, dann kehren Sie zu Schritt 1 zurück
- Wenn es keinen WP-Benutzer gibt, wenn ein authentifizierter Master-Site-Benutzer vorhanden ist, erstellen Sie ihn und dann eine "transparente" Anmeldung (dh der Benutzer sieht kein WP-Anmeldeformular).
Grundsätzlich möchte ich das WP-Anmeldeformular vollständig für Benutzer verbergen, die lediglich Kommentare hinzufügen und später eine Möglichkeit finden, Autoren und Administratoren den direkten Zugriff darauf zu ermöglichen.
Es geht ziemlich langsam voran, hier ist, wofür ich etwas Hilfe gebrauchen könnte:
Ist der Authentifizierungsfilter der richtige? Es scheint nicht in allen Situationen aufgerufen zu werden, die ich erwarten würde - z. B. zeigt das Meta-Widget Anmelde- / Abmelde-Links an, ohne dass der authentifizierte Hook ausgelöst wird
Ich kann
wp_signon()
einWP_User
Objekt zurückgeben (zeigt den Erfolg an), aber es hat keinen Einfluss auf den Anmeldestatus - dh das Meta-Widget wird auch nach dem Aktualisieren noch in "Login" angezeigt.
Jede Hilfe dankbar erhalten :)
Antworten:
OK, der Ansatz, der für mich funktioniert, ist wie folgt:
Angenommen, die Benutzerdatenbank der Hauptwebsite ist autorisierend. Das Haupt-Site-Login-Cookie enthält eine ID und einen Hash des Site-Passworts.
Rufen Sie das Cookie von der Hauptwebsite ab und überprüfen Sie es anhand der Authentifizierungs-API der Hauptwebsite
Falls gültig, verwenden Sie die E-Mail-Adresse aus dem Rückgabewert als
'user_login'
Wert für WP und das Kennwort der gehashten Site als Kennwort für WP.Testen Sie mithilfe von, ob dieser Benutzer in WP vorhanden ist
wp_authenticate('user_login', 'user_pass')
. Dies gibt einWP_User
Objekt bei Erfolg oder einWP_Error
Objekt bei einem Fehler zurück.In diesem Fall
WP_Error/is_wp_error()
können Sie mithilfewp_update_user()
von einen Benutzer erstellen (oder einen Benutzer mit einem geänderten Kennwort aktualisieren).Einloggen über
wp_set_current_user()
,wp_set_auth_cookie()
unddo_action('wp_login, id)
(Dies ist alles in einer Funktion enthalten, die an die
'init'
Aktion angehängt ist. )Dies scheint zu funktionieren - gültige Site-Benutzer, die WP nicht bekannt sind, werden automatisch erstellt. Kennwortänderungen werden berücksichtigt. Wenn das Site-Cookie gesetzt ist und der WP-Benutzer vorhanden ist, erfolgt die einmalige Anmeldung automatisch und nahtlos.
quelle
Das gesamte Authentifizierungssystem ist steckbar. Ich schlage vor, vorhandene Plugins zu prüfen, um eine Vorstellung davon zu bekommen, wie das System überschrieben werden kann. Vielleicht durch einen Blick auf einige LDAP-Plugins ?
quelle
Mehrere benutzerbezogenen Funktion ist bedingt definiert auf
!function_exists()
inwp-includes/pluggable.php
und ist einfach , mit Ihren eigenen Versionen außer Kraft zu setzen.quelle
Das Aktivieren von Single-Sign-On in WordPress hat mich mehr als 18 Stunden gekämpft, aber möglicherweise dauert es nur ein paar Minuten:
Grundsätzlich sollten Sie https://wordpress.org/plugins/wp-force-login/ und eine geänderte Version von https://as.wordpress.org/plugins/jwt-authenticator/ verwenden und dann eine Authentifizierung erstellen -geschützter Endpunkt auf Ihrer Hauptwebsite, der ein JWT (JSON-Web-Token) generiert und zur speziellen URL Ihrer WordPress-Site zurückleitet.
Den vollständigen Code finden Sie hier .
quelle