Add certificate authentication, in-app setup guides and security audit

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
This commit is contained in:
friloo 2026-09-22 15:04:32 +00:00
parent 966164177d
commit 8766927123
No known key found for this signature in database
19 changed files with 2515 additions and 644 deletions

View file

@ -33,6 +33,7 @@ erfüllt. Vor der Einreichung unter <https://wordpress.org/plugins/developers/ad
| 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