Integrations-Anleitung · WordPress

WordPress Single Sign-On mit CodeB.

Den OpenID-Connect-Provider von CodeB als Identitätsquelle für eine Self-hosted-WordPress-Seite nutzen. Ein Konto, ein Passwort, Auto-Provisioning beim ersten Login, optionales Rollen-Mapping. Funktioniert mit dem gängigen Plugin OpenID Connect Generic — kein Bezahl-Add-on nötig.

Zeit bis zum ersten Login: ca. 10 Minuten. Getestet gegen WordPress 6.x mit OpenID Connect Generic von daggerhart (das meistinstallierte OIDC-Plugin auf wordpress.org).

Lesen Sie das, bevor Sie OIDC an einen bestehenden WordPress-Benutzer hängen. OIDC-Plugins verknüpfen normalerweise ein bestehendes lokales Konto beim ersten Sign-in mit dem Subject-Identifier (sub) des IdP. Stimmen lokaler Username/E-Mail und CodeB-Identität nicht zusammen, legt das Plugin unter Umständen ein doppeltes WordPress-Konto an — oder überschreibt bei manchen Konfigurationen die Rolle/Profilfelder des verknüpften Benutzers bei jedem Sign-in. Legen Sie vorab fest, wer welches Feld besitzt (WordPress oder CodeB), und testen Sie mit einem Wegwerf-Benutzer, bevor Sie echte Admin-Konten auf OIDC umstellen.

Inhalt
  1. Voraussetzungen
  2. Plugin installieren
  3. WordPress-Client auf CodeB registrieren
  4. Plugin konfigurieren
  5. Claims mappen
  6. Rollen-Mapping
  7. Round-Trip testen
  8. Aus einem CodeB-Nutzer einen WordPress-Admin machen
  9. Fehlersuche
  10. Kurzreferenz

1. Voraussetzungen

2. Plugin OpenID Connect Generic installieren

In WordPress: Plugins → Hinzufügen. Nach OpenID Connect Generic suchen. Autor sollte daggerhart sein. Jetzt installieren, dann Aktivieren klicken. Nach der Aktivierung erscheint ein neuer Abschnitt unter Einstellungen → OpenID Connect Client.

Andere OIDC-Plugins (WP OAuth Server Client, miniOrange usw.) funktionieren ebenfalls — die Feldnamen unterscheiden sich, die Werte sind dieselben. Diese Anleitung verwendet OpenID Connect Generic, weil es kostenlos, weit verbreitet ist und CodeB als generischen OIDC-Provider behandelt, ohne herstellerspezifische Annahmen.

3. WordPress-Client auf CodeB registrieren

Der CodeB-IdP verlangt eine Vorab-Registrierung jedes Relying Party. Ohne Eintrag liefert er invalid_client.

Auf dem IIS-Host, auf dem CodeB läuft, bearbeiten (oder erzeugen) Sie die Datei unter:

D:\<ihre-codeb-installation>\App_Data\<tenant-domain>\oidc\clients.json

Bei der öffentlichen Installation auf phone.codeb.io lautet der Pfad zum Beispiel D:\aloaha\phone\App_Data\phone.codeb.io\oidc\clients.json. Fügen Sie einen Client-Eintrag hinzu:

{ "clients": [ { "client_id": "wordpress", // OpenID Connect Generic verwendet client_secret_post, // daher MUSS dies ein confidential Client sein. "client_secret": "DURCH_EINEN_STARKEN_ZUFALLS_64_ZEICHEN_WERT_ERSETZEN", "redirect_uris": [ "https://<ihr-wordpress>/wp-admin/admin-ajax.php?action=openid-connect-authorize" ], "description": "WordPress (Plugin OpenID Connect Generic)" } ] }

Die Form der Redirect-URI ist durch das Plugin festgelegt: /wp-admin/admin-ajax.php?action=openid-connect-authorize. Behalten Sie den vollständigen Query-String bei (CodeB prüft die gesamte URL byteweise — Query-String inklusive). Fügen Sie den Port hinzu, wenn Ihr WordPress nicht auf dem Standard-HTTPS-Port läuft.

Datei speichern. Kein IIS-Recycle nötig — der IdP prüft die mtime von clients.json und lädt sie beim nächsten OIDC-Request neu.

Mehrere WordPress-Seiten (Staging, Prod, Blog), die denselben CodeB-Mandanten teilen? Listen Sie alle Callback-URIs im selben redirect_uris-Array. Ein Client-Eintrag kann viele Seiten bedienen.

4. Plugin konfigurieren

In WordPress: Einstellungen → OpenID Connect Client. Füllen Sie das Formular:

FeldWert
Login TypeOpenID-Connect-Button im Login-Formular (oder Auto Login, wenn Sie OIDC für alle erzwingen wollen)
Client IDwordpress (muss exakt mit dem Eintrag in clients.json übereinstimmen)
Client Secret KeyFuegen Sie denselben Wert ein, den Sie in client_secret gesetzt haben
OpenID Scopeopenid profile email
Login Endpoint URLhttps://phone.codeb.io/oidc.ashx?action=authorize
Userinfo Endpoint URLhttps://phone.codeb.io/oidc.ashx?action=userinfo
Token Validation Endpoint URLhttps://phone.codeb.io/oidc.ashx?action=token
End Session Endpoint URLhttps://phone.codeb.io/oidc.ashx?action=end_session
ACR values(leer lassen, außer Sie brauchen Step-up)
Identity Keypreferred_username (der CodeB-Username)
Nickname Keypreferred_username
Email Formatting{email}
Display Name Formatting{name} (fällt auf Nickname zurück, wenn name fehlt)
Link Existing Usersan — beim ersten Sign-in über E-Mail matchen, dann für künftige Logins mit OIDC verknüpfen
Create user if does not existan — neue Konten beim ersten Sign-in automatisch anlegen
Enforce Privacyaus (außer Sie wollen OIDC für ALLE Logins erzwingen, inklusive Admin)

Speichern. Das Plugin entdeckt Endpunkte nicht automatisch — alles wird explizit eingetragen, was zu CodeBs Philosophie passt: vorhersagbar, auditierbar, keine Magie.

Die End Session Endpoint URL ist wichtig für sauberen Benutzerwechsel. Meldet sich ein WordPress-Benutzer ab, leitet das Plugin über diese URL um, was CodeB veranlasst, die SSO-Assertion im Browser-localStorage auf phone.codeb.io zu löschen. Ohne sie loggt der nächste Sign-in den zuvor angemeldeten CodeB-Benutzer stillschweigend wieder ein.

5. Claims mappen

CodeB liefert einen Standardsatz OIDC-Claims. Das Plugin liest sie wie folgt:

CodeB-ClaimWordPress-FeldHinweise
sub(interner OIDC-Subject-Identifier)Stabil pro Benutzer. Verknüpft das WordPress-Konto mit einer CodeB-Identität. Subs nicht zwischen Benutzern wiederverwenden.
preferred_usernameBenutzername / LoginÜber „Identity Key“ konfigurierbar. Wird beim Auto-Provisioning zum WordPress-Login.
nameAnzeigenameAus dem CodeB-Profil. Fällt auf Nickname zurück, wenn leer.
emailE-MailAus dem CodeB-Profil. Wird für „Link Existing Users“ verwendet.
role(out-of-the-box nicht vom Plugin verwendet)Rollen-Mapping siehe Abschnitt 6.
groups(out-of-the-box nicht vom Plugin verwendet)WordPress hat kein eingebautes Group-Konzept; manche Membership-Plugins konsumieren groups via Filter.

Die Profilfelder des Benutzers setzen Sie in der CodeB-Adminseite register.htmlBearbeiten des Nutzers und Name, Email usw. ausfüllen.

6. Rollen-Mapping

OpenID Connect Generic legt neue WordPress-Nutzer standardmäßig mit der Default Role aus Einstellungen → Allgemein an (typischerweise Subscriber). Bestehende verknüpfte Nutzer behalten ihre bisherige WordPress-Rolle.

Soll die Rollenzuweisung von CodeB getrieben sein, ist der einfachste Weg ein kleiner Snippet in functions.php, der bei jedem Sign-in den role-Claim ausliest:

// In Ihrem Theme-functions.php oder einem eigenen mu-plugin. // Hört auf den Post-Login-Hook des OIDC-Plugins und setzt die WP-Rolle // basierend auf dem CodeB-"role"-Claim. Mapping nach Geschmack anpassen. add_action( 'openid-connect-generic-user-logged-in', function ( $user, $token_response ) { $claims = json_decode( base64_decode( str_replace( array('-', '_'), array('+', '/'), explode( '.', $token_response['id_token'] )[1] ) ), true ); $codeb_role = isset( $claims['role'] ) ? $claims['role'] : 'user'; $map = array( 'admin' => 'administrator', 'user' => 'subscriber', 'guest' => 'subscriber', ); if ( isset( $map[ $codeb_role ] ) ) { $user->set_role( $map[ $codeb_role ] ); } }, 10, 2 );

Ergebnis: Meldet sich ein CodeB-Benutzer mit role: "admin" an, wird seine WordPress-Rolle auf Administrator gesetzt. Passen Sie die Map an Ihre WordPress-Rollen-Taxonomie an (Editor, Author, Contributor usw.). Setzen Sie admin in derselben Map zurück auf subscriber, wenn CodeB-seitige Herabstufungen durchschlagen sollen.

Dieses Snippet schreibt die WordPress-Rolle bei jedem Sign-in neu. Verwalten Sie Rollen zusätzlich lokal in WordPress (jemandem manuell Editor gegeben), überschreibt der nächste OIDC-Login das. Wählen Sie eine Source of Truth: Entweder treibt CodeB die Rollen (Snippet verwenden) oder WordPress (Snippet weglassen). Nicht mischen.

7. Round-Trip testen

  1. Eine WordPress-Login-Seite im Inkognito-Modus öffnen.
  2. Den Button Login with OpenID Connect unter dem Standard-Login-Formular klicken.
  3. Der Browser springt zu https://phone.codeb.io/login.html.
  4. CodeB-Username + Passwort eingeben. Der Browser hasht das Passwort lokal zu HA1 und postet nur den Hash — CodeB sieht den Klartext nie.
  5. Bei Erfolg landen Sie zurück in WordPress, angemeldet. Beim ersten Login wird automatisch ein WordPress-Konto mit den obigen Claims angelegt.

Prüfen in WordPress: Benutzer → Alle Benutzer zeigt den neuen Nutzer mit konfigurierter E-Mail und Rolle. Der User-Record trägt einen Meta-Key openid-connect-generic-subject-identity, der dem CodeB-sub entspricht.

8. Aus einem CodeB-Nutzer einen WordPress-Admin machen

Zwei Wege:

  1. Manuell in WordPress. Den Nutzer einmal über OIDC anmelden lassen, damit das Konto existiert, dann unter Benutzer → Alle Benutzer die Rolle auf Administrator umstellen. Das Snippet aus Abschnitt 6 nicht verwenden (sonst macht der nächste Sign-in das rückgängig).
  2. Von CodeB getrieben. Die CodeB-Rolle des Nutzers in register.html auf admin setzen und das Snippet aus Abschnitt 6 verwenden, damit der role-Claim bei jedem Sign-in auf Administrator mappt.

Für feinere Steuerung (Editor vs. Admin, mehrere Admin-Tiers, Capability-Mapping) der Hook openid-connect-generic-user-logged-in in Kombination mit der WordPress-wp_roles()-Capabilities-API.

9. Fehlersuche

SymptomWahrscheinliche Ursache / Fix
invalid_client von CodeB Die von WordPress gesendete Redirect-URI matcht nichts in clients.json. CodeB verlangt byteweise Gleichheit. URI im Browser-Adressfeld im Fehlermoment ablesen und wörtlich in redirect_uris übernehmen.
invalid_request bei /authorize CodeB erwartet PKCE (Public Client), das Plugin sendet aber keinen code_challenge. Tragen Sie ein nicht-leeres client_secret in clients.json ein — dann behandelt CodeB den Client als confidential und akzeptiert die Anfrage ohne PKCE.
invalid_client bei /token Das Plugin hat das falsche client_secret gepostet. Unter WordPress Einstellungen → OpenID Connect Client prüfen, ob das Secret exakt mit clients.json übereinstimmt (kein Leerzeichen am Ende, keine typografischen Anführungszeichen aus Copy-Paste).
WordPress legt bei jedem Sign-in einen neuen Nutzer an statt zu verknüpfen Die Plugin-Option Link Existing Users muss AN sein, und der email-Claim des CodeB-Nutzers muss exakt der E-Mail des bestehenden WordPress-Kontos entsprechen. E-Mail in der CodeB-register.html setzen.
Plugin meldet „HTTP error“ gegenüber /token oder /userinfo Das serverseitige wp_remote_post von WordPress kann CodeB nicht erreichen. Firewall-Regeln / Proxy-Einstellungen auf dem WordPress-Host prüfen. Der Browser macht den Token-Exchange nicht — der WordPress-PHP-Prozess macht ihn und braucht ausgehende HTTPS-Verbindungen zu phone.codeb.io.
SSL-Validierung fehlgeschlagen Ihr WordPress-Host vertraut dem SSL-Zertifikat von CodeB nicht. Bei Self-hosted-CodeB mit privater CA: CA-Zertifikat in den Trust-Store des WordPress-Hosts einspielen, ODER die Plugin-Option „Disable SSL verification“ aktivieren (letztes Mittel — in Produktion nicht angeschaltet lassen).
Benutzer bleibt nach WordPress-Logout angemeldet End Session Endpoint URL in der Plugin-Konfiguration auf https://phone.codeb.io/oidc.ashx?action=end_session setzen. Ohne sie überlebt die CodeB-SSO-Assertion im Browser-localStorage den WordPress-Logout, und der nächste Sign-in mintet automatisch als vorheriger Benutzer.
Beim Testen aus dem Admin ausgesperrt ?loggedout=true an die WordPress-Login-URL anhängen, oder den Ordner des OpenID-Connect-Generic-Plugins unter wp-content/plugins/ per FTP/SSH vorübergehend umbenennen, um das Plugin abzuschalten und über das Standard-WordPress-Login wieder reinzukommen.

10. Kurzreferenz

WasWert
CodeB Authorize-Endpunkthttps://phone.codeb.io/oidc.ashx?action=authorize
CodeB Token-Endpunkthttps://phone.codeb.io/oidc.ashx?action=token
CodeB Userinfo-Endpunkthttps://phone.codeb.io/oidc.ashx?action=userinfo
CodeB End_session-Endpunkthttps://phone.codeb.io/oidc.ashx?action=end_session
CodeB Discovery-Dokumenthttps://phone.codeb.io/.well-known/openid-configuration
CodeB JWKShttps://phone.codeb.io/oidc.ashx?action=jwks
Standard-WordPress-Callbackhttps://<wordpress>/wp-admin/admin-ajax.php?action=openid-connect-authorize
Unterstützte Scopesopenid profile email
SignaturalgorithmusRS256
PKCES256 (Pflicht für Public Clients; optional für confidential)
OIDC-PluginOpenID Connect Generic (daggerhart)