From 073eff74efc6379614d19a5fb6a4f6585beab8b9 Mon Sep 17 00:00:00 2001 From: Denis Arnst Date: Thu, 5 Feb 2026 17:55:10 +0100 Subject: [PATCH] Add OIDC Back-Channel Logout support Implement OIDC Back-Channel Logout 1.0 (RFC). When enabled, the IdP can POST a signed logout_token JWT to invalidate user sessions server-side. - Add BackchannelLogoutHandler: JWT verification via jose, jti replay protection with bounded cache, session destruction by sub or sid - Add oidcSessionId column to sessions table with index for fast lookups - Add backchannel logout route (POST /auth/openid/backchannel-logout) - Notify connected clients via socket to redirect to login page - Add authOpenIDBackchannelLogoutEnabled toggle in schema-driven settings UI - Migration v2.34.0 adds oidcSessionId column and index - Polish settings UI: auto-populate loading state, subfolder dropdown options, KeyValueEditor fixes, localized descriptions via descriptionKey, duplicate key detection, success/error toasts - Localize backchannel logout toast (ToastSessionEndedByProvider) - OidcAuthStrategy tests now use real class via require-cache stubbing --- client/components/app/KeyValueEditor.vue | 26 +- client/components/app/OidcSettings.vue | 32 +- client/layouts/default.vue | 11 + client/pages/config/authentication.vue | 22 +- client/strings/en-us.json | 1 + package.json | 1 + server/Auth.js | 57 +++- server/auth/BackchannelLogoutHandler.js | 148 ++++++++ server/auth/OidcAuthStrategy.js | 93 ++++- server/auth/OidcSettingsSchema.js | 16 +- server/auth/TokenManager.js | 5 +- .../migrations/v2.34.0-backchannel-logout.js | 127 +++++++ server/models/Session.js | 17 +- server/objects/settings/ServerSettings.js | 8 +- .../auth/BackchannelLogoutHandler.test.js | 319 ++++++++++++++++++ test/server/auth/OidcAuthStrategy.test.js | 107 +++--- 16 files changed, 886 insertions(+), 104 deletions(-) create mode 100644 server/auth/BackchannelLogoutHandler.js create mode 100644 server/migrations/v2.34.0-backchannel-logout.js create mode 100644 test/server/auth/BackchannelLogoutHandler.test.js diff --git a/client/components/app/KeyValueEditor.vue b/client/components/app/KeyValueEditor.vue index a50bfba4b..8dda40fcd 100644 --- a/client/components/app/KeyValueEditor.vue +++ b/client/components/app/KeyValueEditor.vue @@ -3,7 +3,7 @@

{{ label }}

- +