No description
Find a file
friloo 1517e7e3bc
Build ZIP with tar instead of rsync
rsync is not available everywhere; tar honours the same .distignore
patterns and ships with every CI runner.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJxAHYdMfKPoN4koRc4Ci2
2026-09-22 14:21:29 +00:00
.github/workflows Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
.wordpress-org Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
assets Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
bin Build ZIP with tar instead of rsync 2026-09-22 14:21:29 +00:00
docs Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
includes Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
languages Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
.distignore Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
.editorconfig Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
.gitattributes Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
.gitignore Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
CHANGELOG.md Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
composer.json Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
LICENSE Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
m365-login.php Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
phpcs.xml.dist Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
README.md Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
readme.txt Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00
uninstall.php Add M365 Login plugin: Microsoft Entra ID sign-in for existing users 2026-09-22 14:21:10 +00:00

M365 Login für WordPress

Ein schlankes, sicherheitsorientiertes WordPress-Plugin, das einen „Login mit Microsoft“-Button auf die Anmeldeseite (wp-login.php) setzt. Bestehende WordPress-Benutzer melden sich mit ihrem Microsoft 365 / Entra-ID-Konto an. Der gemeinsame Schlüssel ist die E-Mail-Adresse es werden keine Benutzer angelegt.

Plugin-Slug / Text Domain: m365-login · Lizenz: GPL-2.0-or-later · PHP ≥ 7.4 · WordPress ≥ 6.0

Funktionen

  • Button auf der Login-Seite Text, Icon (Microsoft-Logo oder eigenes Bild aus der Mediathek), Hintergrund-, Hover-, Text- und Rahmenfarbe, Eckenradius und Position (über/unter dem Formular) sind im Backend einstellbar, mit Live-Vorschau und Farb-Presets.
  • Aufgeräumte Einstellungsseite unter Einstellungen → M365 Login mit Redirect-URI zum Kopieren, Tenant-Verbindungstest und 5-Schritte-Anleitung.
  • Kein Provisioning: Anmeldung nur, wenn ein WordPress-Benutzer mit derselben E-Mail-Adresse existiert.
  • Shortcode [m365_login_button redirect="/mein-konto/"] für eigene Login-Seiten.
  • Vollständig übersetzbar, deutsche Übersetzung enthalten.

Sicherheit

Maßnahme Umsetzung
Authorization Code Flow mit PKCE (S256) Tokens laufen ausschließlich Server-zu-Server, nie durch den Browser.
State & Nonce Einmalig, 10 Minuten gültig, per HttpOnly/SameSite-Cookie an den Browser gebunden (CSRF-/Replay-Schutz, verhindert Login-CSRF).
ID-Token-Prüfung Signatur gegen Microsofts JWKS (RS256, Schlüssel-Rollover wird abgefangen), Issuer, Audience, Tenant, exp/nbf/iat, Nonce. alg=none/HMAC werden abgelehnt.
Tenant-Pinning Bei konfigurierter Tenant-GUID werden Tokens anderer Tenants abgewiesen.
Konto-Bindung Beim ersten Login wird die unveränderliche Microsoft-Objekt-ID am Benutzer gespeichert; spätere Logins mit gleicher E-Mail, aber anderer Identität werden abgelehnt.
Domain-Allowlist Optional nur bestimmte E-Mail-Domains zulassen.
Client Secret verschlüsselt AES-256-GCM, Schlüssel aus den WordPress-Salts abgeleitet; wird nie wieder angezeigt.
WordPress-Standards Capability-Checks, Nonces, Sanitizing aller Eingaben, Escaping aller Ausgaben, wp_safe_redirect, keine externen Assets.

Installation & Einrichtung

  1. Ordner in wp-content/plugins/ legen (oder ZIP aus bin/build-zip.sh hochladen) und aktivieren.
  2. Einstellungen → M365 Login öffnen und die Redirect-URI aus der Seitenleiste kopieren (https://deine-seite.tld/m365-login/callback).
  3. Im Microsoft Entra Admin CenterApp-Registrierungen → Neue Registrierung:
    • Name frei wählbar, z. B. „WordPress Login“.
    • Kontotypen: Nur Konten in diesem Organisationsverzeichnis (Single Tenant).
    • Plattform Web, Redirect-URI einfügen.
  4. Auf der Übersichtsseite Anwendungs-ID (Client) und Verzeichnis-ID (Mandant) kopieren und im Plugin eintragen.
  5. Zertifikate & Geheimnisse → Neuer geheimer Clientschlüssel den Wert (nicht die ID) ins Plugin eintragen. Ablaufdatum notieren; abgelaufene Secrets müssen erneuert werden.
  6. Tokenkonfiguration → Optionalen Anspruch hinzufügen → ID → email (empfohlen). Die delegierten Berechtigungen openid, profile, email sind standardmäßig vorhanden.
  7. Speichern. Der Button erscheint auf wp-login.php; Gestaltung im Tab Button.

Stelle sicher, dass die E-Mail-Adressen der WordPress-Benutzer mit denen in Microsoft 365 übereinstimmen.

Entwickler-Hooks

// Button z. B. nur für eine bestimmte Domain anzeigen
add_filter( 'm365_login_show_button', fn( $show ) => $show && 'intranet.example.com' === $_SERVER['HTTP_HOST'] );

// domain_hint an Microsoft senden
add_filter( 'm365_login_authorize_params', function ( $params ) {
    $params['domain_hint'] = 'contoso.com';
    return $params;
} );

// Login zusätzlich anhand der Claims verbieten (z. B. Gruppenmitgliedschaft)
add_filter( 'm365_login_allow_user', function ( $allowed, WP_User $user, array $claims ) {
    return $allowed && ! empty( $claims['groups'] );
}, 10, 3 );

add_action( 'm365_login_success', function ( WP_User $user, array $claims ) {
    // z. B. Anzeigenamen synchronisieren
}, 10, 2 );

Weitere: m365_login_match_email (E-Mail vor dem Lookup anpassen).

Entwicklung

composer install            # PHPCS + WordPress Coding Standards
composer lint               # php -l über alle Dateien
composer phpcs              # Coding-Standards-Prüfung
bash bin/build-zip.sh       # build/m365-login.zip für Upload/Einreichung
python3 bin/compile-mo.py   # languages/*.po → *.mo

Die GitHub-Actions-Pipeline (.github/workflows/ci.yml) führt Syntax-Check (PHP 7.48.4), PHPCS und den offiziellen WordPress Plugin Check aus.

Einreichung bei WordPress.org

Siehe docs/wordpress-org-einreichung.md für die vollständige Checkliste.

Lizenz

GPL-2.0-or-later siehe LICENSE.