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:
+13
-1
@@ -14,6 +14,7 @@
|
||||
"cors_blocked": "Der Server ist erreichbar, blockiert aber Cross-Origin-Anfragen. Überprüfen Sie die CORS-Einstellungen Ihres JMAP-Servers und erlauben Sie diese Domain.",
|
||||
"generic": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.",
|
||||
"totp_invalid": "Ungültiger Authentifizierungscode. Überprüfen Sie Ihre Authenticator-App.",
|
||||
"oauth_discovery_failed": "SSO ist aktiviert, aber der Identitätsanbieter ist nicht erreichbar. Überprüfen Sie Ihre OAuth-Konfiguration.",
|
||||
"server_error": "Der Server ist vorübergehend nicht erreichbar. Bitte versuchen Sie es später erneut."
|
||||
},
|
||||
"config_error": {
|
||||
@@ -31,7 +32,18 @@
|
||||
"totp_hint": "Aktivieren Sie dies, wenn Ihr Konto einen Zwei-Faktor-Code erfordert",
|
||||
"totp_checkbox": "Zwei-Faktor-Authentifizierungscode verwenden",
|
||||
"session_expired": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.",
|
||||
"dismiss": "Schließen"
|
||||
"dismiss": "Schließen",
|
||||
"or": "oder",
|
||||
"sign_in_sso": "Mit SSO anmelden",
|
||||
"oauth_completing": "Anmeldung wird abgeschlossen...",
|
||||
"oauth_error": {
|
||||
"title": "Authentifizierung fehlgeschlagen",
|
||||
"invalid_state": "Sicherheitsvalidierung fehlgeschlagen. Bitte erneut anmelden.",
|
||||
"missing_params": "Fehlende Autorisierungsdaten. Bitte erneut anmelden.",
|
||||
"token_exchange_failed": "Authentifizierung konnte nicht abgeschlossen werden. Bitte erneut versuchen.",
|
||||
"access_denied": "Zugriff verweigert. Bitte kontaktieren Sie Ihren Administrator.",
|
||||
"back_to_login": "Zurück zur Anmeldung"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"close": "Schließen",
|
||||
|
||||
+14
-2
@@ -14,7 +14,8 @@
|
||||
"cors_blocked": "The server is reachable but is blocking cross-origin requests. Check your JMAP server's CORS settings and allow this domain.",
|
||||
"server_error": "The server is temporarily unavailable. Please try again later.",
|
||||
"generic": "An unexpected error occurred. If this persists, contact your administrator.",
|
||||
"totp_invalid": "Invalid authentication code. Please check your authenticator app and try again."
|
||||
"totp_invalid": "Invalid authentication code. Please check your authenticator app and try again.",
|
||||
"oauth_discovery_failed": "SSO is enabled but the identity provider could not be reached. Check your OAuth configuration."
|
||||
},
|
||||
"show_password": "Show password",
|
||||
"hide_password": "Hide password",
|
||||
@@ -31,7 +32,18 @@
|
||||
"totp_hide": "Hide two-factor authentication",
|
||||
"totp_checkbox": "Use two-factor authentication code",
|
||||
"session_expired": "Your session has expired. Please sign in again.",
|
||||
"dismiss": "Dismiss"
|
||||
"dismiss": "Dismiss",
|
||||
"or": "or",
|
||||
"sign_in_sso": "Sign in with SSO",
|
||||
"oauth_completing": "Completing sign in...",
|
||||
"oauth_error": {
|
||||
"title": "Authentication Failed",
|
||||
"invalid_state": "Security validation failed. Please try signing in again.",
|
||||
"missing_params": "Missing authorization data. Please try signing in again.",
|
||||
"token_exchange_failed": "Failed to complete authentication. Please try again.",
|
||||
"access_denied": "Access was denied. Please contact your administrator.",
|
||||
"back_to_login": "Back to login"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"close": "Close",
|
||||
|
||||
+13
-1
@@ -14,6 +14,7 @@
|
||||
"cors_blocked": "El servidor es accesible pero está bloqueando las solicitudes de origen cruzado. Verifique la configuración CORS de su servidor JMAP y permita este dominio.",
|
||||
"generic": "Ocurrió un error. Por favor, inténtelo de nuevo.",
|
||||
"totp_invalid": "Código de autenticación inválido. Verifica tu aplicación de autenticación.",
|
||||
"oauth_discovery_failed": "SSO está habilitado pero no se pudo contactar al proveedor de identidad. Verifica tu configuración OAuth.",
|
||||
"server_error": "El servidor no está disponible temporalmente. Inténtalo más tarde."
|
||||
},
|
||||
"config_error": {
|
||||
@@ -31,7 +32,18 @@
|
||||
"totp_hint": "Activa si tu cuenta requiere un código de autenticación en dos pasos",
|
||||
"totp_checkbox": "Usar código de autenticación en dos pasos",
|
||||
"session_expired": "Tu sesión ha expirado. Inicia sesión de nuevo.",
|
||||
"dismiss": "Cerrar"
|
||||
"dismiss": "Cerrar",
|
||||
"or": "o",
|
||||
"sign_in_sso": "Iniciar sesión con SSO",
|
||||
"oauth_completing": "Completando inicio de sesión...",
|
||||
"oauth_error": {
|
||||
"title": "Error de autenticación",
|
||||
"invalid_state": "La validación de seguridad falló. Intenta iniciar sesión de nuevo.",
|
||||
"missing_params": "Faltan datos de autorización. Intenta iniciar sesión de nuevo.",
|
||||
"token_exchange_failed": "No se pudo completar la autenticación. Inténtalo de nuevo.",
|
||||
"access_denied": "Acceso denegado. Contacta a tu administrador.",
|
||||
"back_to_login": "Volver al inicio de sesión"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"close": "Cerrar",
|
||||
|
||||
+13
-1
@@ -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",
|
||||
|
||||
+13
-1
@@ -14,6 +14,7 @@
|
||||
"cors_blocked": "Il server è raggiungibile ma sta bloccando le richieste cross-origin. Controlla le impostazioni CORS del tuo server JMAP e consenti questo dominio.",
|
||||
"generic": "Si è verificato un errore. Riprova.",
|
||||
"totp_invalid": "Codice di autenticazione non valido. Controlla la tua app di autenticazione.",
|
||||
"oauth_discovery_failed": "SSO è abilitato ma il provider di identità non è raggiungibile. Controlla la configurazione OAuth.",
|
||||
"server_error": "Il server non è temporaneamente disponibile. Riprova più tardi."
|
||||
},
|
||||
"config_error": {
|
||||
@@ -31,7 +32,18 @@
|
||||
"totp_hint": "Attiva se il tuo account richiede un codice di autenticazione a due fattori",
|
||||
"totp_checkbox": "Usa codice di autenticazione a due fattori",
|
||||
"session_expired": "La sessione è scaduta. Accedi di nuovo.",
|
||||
"dismiss": "Chiudi"
|
||||
"dismiss": "Chiudi",
|
||||
"or": "o",
|
||||
"sign_in_sso": "Accedi con SSO",
|
||||
"oauth_completing": "Completamento dell'accesso...",
|
||||
"oauth_error": {
|
||||
"title": "Autenticazione non riuscita",
|
||||
"invalid_state": "La convalida di sicurezza è fallita. Prova ad accedere di nuovo.",
|
||||
"missing_params": "Dati di autorizzazione mancanti. Prova ad accedere di nuovo.",
|
||||
"token_exchange_failed": "Impossibile completare l'autenticazione. Riprova.",
|
||||
"access_denied": "Accesso negato. Contatta il tuo amministratore.",
|
||||
"back_to_login": "Torna al login"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"close": "Chiudi",
|
||||
|
||||
+13
-1
@@ -14,6 +14,7 @@
|
||||
"cors_blocked": "サーバーには到達できますが、クロスオリジンリクエストがブロックされています。JMAPサーバーのCORS設定を確認し、このドメインを許可してください。",
|
||||
"generic": "エラーが発生しました。もう一度お試しください。",
|
||||
"totp_invalid": "認証コードが無効です。認証アプリを確認してください。",
|
||||
"oauth_discovery_failed": "SSOは有効ですが、IDプロバイダーに接続できません。OAuth設定を確認してください。",
|
||||
"server_error": "サーバーが一時的に利用できません。後でもう一度お試しください。"
|
||||
},
|
||||
"config_error": {
|
||||
@@ -31,7 +32,18 @@
|
||||
"dismiss": "閉じる",
|
||||
"show_password": "パスワードを表示",
|
||||
"hide_password": "パスワードを隠す",
|
||||
"totp_hint": "アカウントに二要素認証コードが必要な場合に有効にしてください"
|
||||
"totp_hint": "アカウントに二要素認証コードが必要な場合に有効にしてください",
|
||||
"or": "または",
|
||||
"sign_in_sso": "SSOでサインイン",
|
||||
"oauth_completing": "サインイン処理中...",
|
||||
"oauth_error": {
|
||||
"title": "認証に失敗しました",
|
||||
"invalid_state": "セキュリティ検証に失敗しました。再度サインインしてください。",
|
||||
"missing_params": "認証データが不足しています。再度サインインしてください。",
|
||||
"token_exchange_failed": "認証を完了できませんでした。再度お試しください。",
|
||||
"access_denied": "アクセスが拒否されました。管理者にお問い合わせください。",
|
||||
"back_to_login": "ログインに戻る"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"close": "閉じる",
|
||||
|
||||
+13
-1
@@ -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",
|
||||
|
||||
+13
-1
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user