如何在第二个现有的打开的浏览器 window 中检测前端通道注销并将用户重定向到注销页面?

How to detect front-channel logout in a second existing, open browser window and redirect the user to a logged-out page?

假设我打开了两个应用程序,每个选项卡中都有一个,并且它们都利用同一个 SSO 服务器。用户在应用程序 A 中全局注销(前端通道),但应用程序 B 在另一个选项卡中保持打开状态。前端通道负责擦除 cookie,但理想情况下会有一种方法将 App B 重定向到 "you've been logged out" 页面。但是,由于无法通过 javascript 检测到 HTTPOnly cookie,因此应用程序 B 选项卡中的 javascript 运行 如何检测到 cookie 的删除并引导用户?我想我们也可以编写一个非 HTTPOnly cookie 并对其进行监控,但我认为可能有更好的解决方案。

IdentityServer4 通过此处的 "session status change" 规范支持这一点:

https://openid.net/specs/openid-connect-session-1_0.html#ChangeNotification

这允许您的应用程序 ping(通过对 iframe 的 postMessage 调用)以获取对当前会话的更改,并接收指示它是否已更改的响应。这一切都发生在客户端,它使用一个非 HTTP-only cookie,该 cookie 填充了当前会话 ID。

有问题的端点在 /.well-known/openid-configuration

中被公布为 check_session_iframe

oidc-client-js 开箱即用,但对于服务器端应用程序,您可能需要自己动手。