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": "O servidor está acessível mas está bloqueando requisições de origem cruzada. Verifique as configurações de CORS do seu servidor JMAP e permita este domínio.",
"generic": "Ocorreu um erro. Por favor, tente novamente.",
"totp_invalid": "Código de autenticação inválido. Verifique seu aplicativo de autenticação.",
"oauth_discovery_failed": "SSO está ativado mas o provedor de identidade não pôde ser contactado. Verifique sua configuração OAuth.",
"server_error": "O servidor está temporariamente indisponível. Tente novamente mais tarde."
},
"config_error": {
@@ -31,7 +32,18 @@
"totp_hint": "Ative se sua conta requer um código de autenticação de dois fatores",
"totp_checkbox": "Usar código de autenticação de dois fatores",
"session_expired": "Sua sessão expirou. Faça login novamente.",
"dismiss": "Fechar"
"dismiss": "Fechar",
"or": "ou",
"sign_in_sso": "Entrar com SSO",
"oauth_completing": "Concluindo login...",
"oauth_error": {
"title": "Falha na autenticação",
"invalid_state": "A validação de segurança falhou. Tente entrar novamente.",
"missing_params": "Dados de autorização ausentes. Tente entrar novamente.",
"token_exchange_failed": "Não foi possível concluir a autenticação. Tente novamente.",
"access_denied": "Acesso negado. Entre em contato com seu administrador.",
"back_to_login": "Voltar ao login"
}
},
"sidebar": {
"close": "Fechar",