mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-14 19:06:35 +03:00
Implement OIDC Front-Channel / Back-Channel Logout #5016
Closed
opened 2026-02-05 09:33:58 +03:00 by OVERLORD
·
4 comments
No Branch/Tag Specified
development
l10n_development
release
v25-12
llm_only
vectors
v25-11
docker_env
drawio_rendering
user_permissions
ldap_host_failover
svg_image
prosemirror
captcha_example
fix/video-export
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
pull-request
Mirrored from GitHub Pull Request
No Label
🔨 Feature Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#5016
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @timhallmann on GitHub (Oct 20, 2024).
Describe the feature you'd like
BookStack should provide endpoints for Front-Channel and Back-Channel Logout. This would enable the OpenID Provider to request the termination of a specific session or all sessions associated with a user.
Describe the benefits this would bring to existing BookStack users
Can the goal of this request already be achieved via other means?
No.
Have you searched for an existing open/closed issue?
How long have you been using BookStack?
Not using yet, just scoping
Additional context
Requires #5278 (OIDC session handling).
Prior discussion in #3715 (RP-Initiated Logout).
The necessary specs have been finalized a while ago:
In terms of implementation, both Keycloak and Auth0 support Back-Channel Logout, although I've not looked into the extent of support from other OpenID Providers. Keycloak passes the OpenId Conformance tests for Front/Back-Channel Logout.
Plan to implement Front/Back-Channel Logout:
Alternatively, implement custom sessions.
Notes / Considerations:
@IntelligentesTierMaulApollo13 commented on GitHub (Jan 2, 2025):
@timhallmann In the meantime it is maybe an option to use the SAML2 interface. As I discovered recently (unfortunately only after having changed my installation from LDAP to OIDC already) the SAML2 implementation seems to support both RP-initiated as well as IdP-initiated SLO (I just don't know about session handling especially with multiple devices).
@timhallmann commented on GitHub (Jan 9, 2025):
As far as I understand the SAML implementation, or rather the authentication implementation in general, Back-Channel Logout is currently not possible at all, as we can't access the server-side sessions of other users. Front-Channel Logout on its own offers little benefit in our case, at least not enough to use SAML instead.
However, Front-Channel Logout could be added to OIDC with probably little effort as well, as it would not need changes to the session management. If it's helpful to others, it could be tracked independently through a new issue.
@schlupmann commented on GitHub (Mar 27, 2025):
Back-Channel logout works for us with simplesamlphp (see comment https://github.com/BookStackApp/BookStack/issues/2715#issuecomment-2751572787)
I haven't looked into OIDC, but as simplesamlphp does support various other protocols, OIDC included, it should be possible to make the SOAP logout work with OIDC.
@timhallmann commented on GitHub (Mar 31, 2025):
@schlupmann Thank you for publishing (and explaining!) your code, I really appreciate it. It made me realize I've been severely overthinking even a hackish implementation of Back-Channel Logouts (and sessions). Though, knowing neither Laravel nor PHP didn't help.
Following your example, I've implemented Backchannel Logout by accessing the database session directly. Having done that, I noticed I could easily implement session management as well. So easily in fact, I wish I hadn't bothered with Backchannel Logout at all.
The code can be found in this gist.
It seems to work fine, except when multiple refreshes are triggered via concurrent requests. I'm not sure how to best lock that section, but users are unlikely to encounter this issue -- I certainly didn't, even while trying to test for it.
Since this solution works for our use case, I'm closing this issue.