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": "Le serveur est joignable mais bloque les requêtes cross-origin. Vérifiez la configuration CORS de votre serveur JMAP et autorisez ce domaine.",
"generic": "Une erreur s'est produite. Veuillez réessayer.",
"totp_invalid": "Code d'authentification invalide. Vérifiez votre application d'authentification.",
"oauth_discovery_failed": "Le SSO est activé mais le fournisseur d'identité est injoignable. Vérifiez votre configuration OAuth.",
"server_error": "Le serveur est temporairement indisponible. Veuillez réessayer plus tard."
},
"config_error": {
@@ -31,7 +32,18 @@
"dismiss": "Fermer",
"show_password": "Afficher le mot de passe",
"hide_password": "Masquer le mot de passe",
"totp_hint": "Activez si votre compte nécessite un code d'authentification à deux facteurs"
"totp_hint": "Activez si votre compte nécessite un code d'authentification à deux facteurs",
"or": "ou",
"sign_in_sso": "Se connecter avec SSO",
"oauth_completing": "Connexion en cours...",
"oauth_error": {
"title": "Échec de l'authentification",
"invalid_state": "La validation de sécurité a échoué. Veuillez réessayer.",
"missing_params": "Données d'autorisation manquantes. Veuillez réessayer.",
"token_exchange_failed": "Impossible de finaliser l'authentification. Veuillez réessayer.",
"access_denied": "L'accès a été refusé. Veuillez contacter votre administrateur.",
"back_to_login": "Retour à la connexion"
}
},
"sidebar": {
"close": "Fermer",