我们使用ItFoxTec库进行saml身份验证。联合登录工作正常。联合注销问题。场景如下: 我们有两个应用程序,分别命名为 mvcapp 和 singlepageapp(angular)。当我单击 mvcapp 上的登录按钮时,我会重定向到我的 IDP 登录页面并在身份验证后返回 mvcapp。在mvcapp上有一个我的单页应用程序的链接。我点击了那个链接,我已经登录了 IDP,所以我的 api 从 IDP 接收一个 saml 令牌,api 使用令牌并制作一个 jwt 令牌,并将我重定向到 singlepageapp 以及查询字符串中的 jwt 令牌(使用 saml 令牌创建)。
现在用户从 mvcapp 单击注销按钮,注销请求转到 IDP 注销端点。IDP知道,该用户已登录这两个应用程序,并且IDP具有这两个应用程序的注销端点。现在 IDP 为 singalpageapp 发出注销请求(logout endpoint is api endpoint).api 没有任何 cookie,但 singalpageapp 在浏览器上有 jwt 令牌。所以我的问题是,API 将如何删除 JWT 令牌。以便用户从两个应用程序注销。
首先,如果 IdP 同时支持 SAML 2.0 和 OIDC(OpenID Connect),最好的解决方案是让 mvcapp 使用 SAML 2.0,让单页应用程序使用 OIDC。或者也许两个应用程序都使用 OIDC。
或者,我认为解决方案是用户 OIDC 来保护单页应用程序,而不仅仅是 JWT,实际上 api 也成为 IdP。由于 API 充当 IdP,因此 API 需要保存用户会话,但无法使用 Cookie。
OIDC 支持用户会话和 OpenID Connect 会话管理注销。此标准还支持会话状态更改通知,其中单页应用程序客户端可以调用 api IdP 来验证 JWT 中的用户会话是否仍处于活动状态。