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": "サーバーには到達できますが、クロスオリジンリクエストがブロックされています。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": "閉じる",