feat: add OAuth2/OIDC with PKCE for SSO login

Add opt-in SSO authentication alongside Basic Auth. OAuth endpoints are
auto-discovered via .well-known, with support for external IdPs
(Keycloak, Authentik) via configurable OAUTH_ISSUER_URL. Sessions
persist through httpOnly refresh token cookies with automatic renewal.
This commit is contained in:
Matthieu MALVACHE
2026-02-25 23:41:37 +01:00
committed by Matthieu MALVACHE
parent 110dd98ad4
commit ec06b0c494
20 changed files with 857 additions and 92 deletions
+13 -1
View File
@@ -14,6 +14,7 @@
"cors_blocked": "De server is bereikbaar maar blokkeert cross-origin verzoeken. Controleer de CORS-instellingen van uw JMAP-server en sta dit domein toe.",
"generic": "Er is een fout opgetreden. Probeer het opnieuw.",
"totp_invalid": "Ongeldige authenticatiecode. Controleer uw authenticator-app.",
"oauth_discovery_failed": "SSO is ingeschakeld maar de identiteitsprovider is niet bereikbaar. Controleer uw OAuth-configuratie.",
"server_error": "De server is tijdelijk niet beschikbaar. Probeer het later opnieuw."
},
"config_error": {
@@ -31,7 +32,18 @@
"totp_hint": "Schakel in als uw account een tweefactorauthenticatiecode vereist",
"totp_checkbox": "Tweefactorauthenticatiecode gebruiken",
"session_expired": "Uw sessie is verlopen. Meld u opnieuw aan.",
"dismiss": "Sluiten"
"dismiss": "Sluiten",
"or": "of",
"sign_in_sso": "Inloggen met SSO",
"oauth_completing": "Aanmelding voltooien...",
"oauth_error": {
"title": "Authenticatie mislukt",
"invalid_state": "Beveiligingsvalidatie mislukt. Probeer opnieuw in te loggen.",
"missing_params": "Ontbrekende autorisatiegegevens. Probeer opnieuw in te loggen.",
"token_exchange_failed": "Authenticatie kon niet worden voltooid. Probeer het opnieuw.",
"access_denied": "Toegang geweigerd. Neem contact op met uw beheerder.",
"back_to_login": "Terug naar inloggen"
}
},
"sidebar": {
"close": "Sluiten",