Certificate (RFC 7523 client assertion) as an alternative to the client secret: one-click generation of a 3072-bit RSA key pair with a self-signed certificate, .cer download (public part only), own PEM upload with validation, expiry display, encrypted key storage. Both the authorization code exchange and the Graph client-credentials request use the selected method. Step-by-step guides for secret, certificate and the app registration are shown in the settings. Security audit (docs/security-audit.md) and fixes: - Multi-tenant mode ignored the unverified email claim: matching now uses the UPN only, or the email claim when xms_edov is true. - Login starts are rate limited per client (30 per 10 minutes). - Optional trusted proxy header for client IPs (M365_LOGIN_CLIENT_IP_HEADER / filter). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JJxAHYdMfKPoN4koRc4Ci2
3.9 KiB
3.9 KiB
Checkliste: Einreichung im WordPress-Plugin-Verzeichnis
Das Plugin ist so aufgebaut, dass es die Richtlinien des Plugin-Verzeichnisses erfüllt. Vor der Einreichung unter https://wordpress.org/plugins/developers/add/ bitte die folgenden Punkte durchgehen.
1. Vor dem Upload prüfen
Tested up to:inreadme.txtauf die aktuelle WordPress-Version setzen (das Review-Team lehnt veraltete Werte ab).Stable tag:inreadme.txtundVersion:inm365-login.phpsowieM365_LOGIN_VERSIONsind identisch.Contributors:inreadme.txtenthält deinen WordPress.org-Benutzernamen (aktuellfriloo).- Übersetzungsdateien aktualisiert:
wp i18n make-pot . languages/m365-login.pot(WP-CLI) oderpython3 bin/make-pot.py, danachpython3 bin/compile-mo.py. bash bin/build-zip.shausführen undbuild/m365-login.ziphochladen (Ordner im ZIP heißtm365-login, nichtwp-m365-login).- Lokal den Plugin Check laufen lassen (Plugin „Plugin Check (PCP)“ installieren oder auf das CI-Ergebnis achten) – er muss ohne Fehler durchlaufen.
2. Namens- und Marken-Regeln
- Slugs dürfen nicht mit
wp-oder mit Markennamen wiemicrosoft-beginnen; deshalb heißt der Slugm365-loginund der Plugin-Name „M365 Login“. Sollte das Review-Team dennoch einen anderen Slug zuweisen (z. B. wegen Trademark-Bedenken bei „M365“), müssen Text Domain, Ordnername undreadme.txtangepasst werden – Suche nachm365-loginim Repo. - Der Name darf nicht suggerieren, dass das Plugin von Microsoft stammt. Beschreibungstexte verwenden deshalb Formulierungen wie „sign in with Microsoft“, nicht „official Microsoft plugin“.
- Das Microsoft-Logo ist eingebettet, damit der Button so aussieht, wie Nutzer es erwarten. Microsoft erlaubt die Verwendung des Logos für „Sign in with Microsoft“-Buttons gemäß den Branding-Richtlinien. Ein Reviewer könnte trotzdem nachfragen – der Hinweis auf diese Richtlinie reicht in der Regel.
3. Was bereits erfüllt ist
| Anforderung | Umsetzung |
|---|---|
| GPL-kompatible Lizenz | LICENSE (GPL-2.0), Header in m365-login.php, readme.txt |
readme.txt im WP-Format |
inkl. Pflichtabschnitt External services (Microsoft-Login- und Graph-Endpunkte, übertragene Daten, Links zu Nutzungsbedingungen/Datenschutz) |
| Keine externen Assets/CDNs | CSS/JS liegen im Plugin; einzige Netzwerkverbindungen gehen zu login.microsoftonline.com und (optional, Gruppenprüfung) graph.microsoft.com |
| Sanitizing / Escaping / Nonces | Settings API mit sanitize_callback, esc_* bei jeder Ausgabe, check_ajax_referer + current_user_can |
| Eindeutiges Präfix | m365_login_ / M365_Login_ für alle globalen Bezeichner |
| Kein Tracking, keine Telefon-nach-Hause-Funktion | – |
| Saubere Deinstallation | uninstall.php entfernt Option, Transients und User-Meta (auch Multisite) |
| Keine minifizierten Dateien ohne Quelle | Alle Assets liegen unminifiziert vor |
Requires PHP / Requires at least |
7.4 / 6.0 |
| Übersetzbar | Text Domain m365-login, languages/m365-login.pot, deutsche Übersetzung |
| Security-Review | docs/security-audit.md (Bedrohungsmodell, Befunde, Fixes) |
4. Nach der Freigabe
- SVN-Zugang aus der Freigabe-Mail nutzen:
svn co https://plugins.svn.wordpress.org/m365-login. - Inhalt von
build/m365-login/nachtrunk/kopieren,assets/aus.wordpress-org/befüllen (Icon, Banner, Screenshots). svn cp trunk tags/1.0.0und committen.- Screenshots erstellen (siehe
== Screenshots ==inreadme.txt) und alsscreenshot-1.png… inassets/ablegen. - Optional: GitHub Action
10up/action-wordpress-plugin-deployeinrichten, um Releases automatisch nach SVN zu spiegeln.