Add Entra group restriction, button-only mode and detailed README
Groups: a Graph-backed picker on the Security tab (search by name or paste object IDs) stores allowed group IDs. During sign-in membership is read from the ID token's groups claim when present, otherwise verified through Microsoft Graph checkMemberGroups (transitive). Verification failures refuse the sign-in. Button-only mode: hides the password form and the lost-password link and rejects password sign-ins on wp-login.php via the authenticate filter. A generated, rate-limited fallback key re-enables the form for 30 minutes per browser; M365_LOGIN_DISABLE_BUTTON_ONLY switches the mode off from wp-config.php. Also: new German-language README with sequence diagram, settings reference, troubleshooting and hook examples; readme.txt external services section now covers Microsoft Graph; translations updated. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JJxAHYdMfKPoN4koRc4Ci2
This commit is contained in:
parent
1517e7e3bc
commit
1202283eda
20 changed files with 2241 additions and 517 deletions
64
.github/assets/button-preview.svg
vendored
Normal file
64
.github/assets/button-preview.svg
vendored
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="300" viewBox="0 0 720 300" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0" stop-color="#f6f7f7"/>
|
||||
<stop offset="1" stop-color="#e9edf2"/>
|
||||
</linearGradient>
|
||||
<filter id="shadow" x="-10%" y="-10%" width="120%" height="130%">
|
||||
<feDropShadow dx="0" dy="6" stdDeviation="10" flood-color="#0b1d33" flood-opacity="0.12"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<rect width="720" height="300" rx="20" fill="url(#bg)"/>
|
||||
|
||||
<!-- Login card -->
|
||||
<g transform="translate(200 34)" filter="url(#shadow)">
|
||||
<rect width="320" height="232" rx="6" fill="#fff" stroke="#c3c4c7"/>
|
||||
<!-- fake fields -->
|
||||
<text x="24" y="38" font-size="13" fill="#3c434a">Benutzername oder E-Mail-Adresse</text>
|
||||
<rect x="24" y="48" width="272" height="34" rx="4" fill="#fff" stroke="#8c8f94"/>
|
||||
<text x="24" y="108" font-size="13" fill="#3c434a">Passwort</text>
|
||||
<rect x="24" y="118" width="272" height="34" rx="4" fill="#fff" stroke="#8c8f94"/>
|
||||
<!-- divider -->
|
||||
<line x1="24" y1="180" x2="296" y2="180" stroke="#dcdcde"/>
|
||||
<rect x="140" y="171" width="40" height="18" fill="#fff"/>
|
||||
<text x="160" y="184" font-size="12" fill="#646970" text-anchor="middle">oder</text>
|
||||
<!-- Microsoft button -->
|
||||
<rect x="24" y="196" width="272" height="44" rx="4" fill="#2f2f2f"/>
|
||||
<g transform="translate(70 206)">
|
||||
<rect width="24" height="24" rx="2" fill="#fff"/>
|
||||
<rect x="4" y="4" width="7" height="7" fill="#f25022"/>
|
||||
<rect x="13" y="4" width="7" height="7" fill="#7fba00"/>
|
||||
<rect x="4" y="13" width="7" height="7" fill="#00a4ef"/>
|
||||
<rect x="13" y="13" width="7" height="7" fill="#ffb900"/>
|
||||
</g>
|
||||
<text x="180" y="223" font-size="15" font-weight="600" fill="#fff" text-anchor="middle">Login mit Microsoft</text>
|
||||
</g>
|
||||
|
||||
<!-- Colour swatches -->
|
||||
<g transform="translate(40 60)">
|
||||
<text x="0" y="0" font-size="12" fill="#646970" font-weight="600">PRESETS</text>
|
||||
<g transform="translate(0 16)">
|
||||
<rect width="120" height="34" rx="17" fill="#2f2f2f"/><text x="60" y="22" font-size="12" fill="#fff" text-anchor="middle" font-weight="600">Microsoft dark</text>
|
||||
</g>
|
||||
<g transform="translate(0 60)">
|
||||
<rect width="120" height="34" rx="17" fill="#fff" stroke="#8c8c8c"/><text x="60" y="22" font-size="12" fill="#5e5e5e" text-anchor="middle" font-weight="600">Microsoft light</text>
|
||||
</g>
|
||||
<g transform="translate(0 104)">
|
||||
<rect width="120" height="34" rx="17" fill="#0078d4"/><text x="60" y="22" font-size="12" fill="#fff" text-anchor="middle" font-weight="600">Azure blue</text>
|
||||
</g>
|
||||
<g transform="translate(0 148)">
|
||||
<rect width="120" height="34" rx="17" fill="#2271b1"/><text x="60" y="22" font-size="12" fill="#fff" text-anchor="middle" font-weight="600">WordPress blue</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- Right: security badges -->
|
||||
<g transform="translate(560 60)" font-size="12" fill="#1d2327">
|
||||
<text x="0" y="0" font-size="12" fill="#646970" font-weight="600">SICHERHEIT</text>
|
||||
<g transform="translate(0 16)"><circle cx="8" cy="8" r="8" fill="#1e6b31"/><path d="M4.5 8.5l2.5 2.5 4.5-5" fill="none" stroke="#fff" stroke-width="2"/><text x="24" y="12">PKCE (S256)</text></g>
|
||||
<g transform="translate(0 44)"><circle cx="8" cy="8" r="8" fill="#1e6b31"/><path d="M4.5 8.5l2.5 2.5 4.5-5" fill="none" stroke="#fff" stroke-width="2"/><text x="24" y="12">State + Nonce</text></g>
|
||||
<g transform="translate(0 72)"><circle cx="8" cy="8" r="8" fill="#1e6b31"/><path d="M4.5 8.5l2.5 2.5 4.5-5" fill="none" stroke="#fff" stroke-width="2"/><text x="24" y="12">JWKS-Signatur</text></g>
|
||||
<g transform="translate(0 100)"><circle cx="8" cy="8" r="8" fill="#1e6b31"/><path d="M4.5 8.5l2.5 2.5 4.5-5" fill="none" stroke="#fff" stroke-width="2"/><text x="24" y="12">Tenant-Pinning</text></g>
|
||||
<g transform="translate(0 128)"><circle cx="8" cy="8" r="8" fill="#1e6b31"/><path d="M4.5 8.5l2.5 2.5 4.5-5" fill="none" stroke="#fff" stroke-width="2"/><text x="24" y="12">Secret verschlüsselt</text></g>
|
||||
<g transform="translate(0 156)"><circle cx="8" cy="8" r="8" fill="#1e6b31"/><path d="M4.5 8.5l2.5 2.5 4.5-5" fill="none" stroke="#fff" stroke-width="2"/><text x="24" y="12">Gruppen-Check</text></g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
Loading…
Add table
Add a link
Reference in a new issue