Passport.js SSO - 验证用户是否仍登录到 IdP

Passport.js SSO - verify user is still logged in to the IdP

我正在使用 passport-saml/multiSamlStrategy(仅在某些情况下才使用 IdP 启动的流程)。

我想定期验证用户是否仍登录到 IdP 并在他未登录时将他注销。
问题是 req.isAuthenticated() 总是 returns true 因为它只考虑网络应用程序的会话而不考虑 IdP 会话。

如果用户直接连接到 IdP 并且自己从 IdP 注销,我希望 req.isAuthenticated() 到 return false.

我怎样才能做到这一点?这可能吗?

SAML 协议观点:无法确定会话在 IdP 中是否有效。

最接近的近似值涉及 SAML 中的单一注销 (SLO) 配置文件。 如果身份提供者和服务提供者(您的应用程序)都支持 SLO,IdP 可以有一个注销按钮,其工作方式如下:

  1. 在 IdP 中单击注销后,IdP 会向所有服务提供商发送一条 LogoutRequest 消息,要求他们终止会话。
  2. 大约在同一时间,IdP 终止了它自己的会话。

SLO 可能会在许多精心策划的假设下发挥作用。在实践中,"single logout" 存在许多问题。前两个问题 - 协议的异步性质和 "ownership"(本质上)多 SP 场景中的共享身份验证上下文。这个 Stanford article 很好地概述了其中的一些问题。这就是很少使用 SLO 的原因,并且向服务提供商推荐的选项是只管理他们自己的会话而不考虑 IdP。