首页 > 解决方案 > 使用 dotcore api 在单页应用程序上联合注销

问题描述

我们正在使用 ItFoxTec 库进行 saml 身份验证。联合登录工作正常。问题在于联合注销。场景就像:我们有两个名为 mvcapp 和 singlepageapp(angular) 的应用程序。当我单击 mvcapp 上的登录按钮时,我重定向到我的 IDP 登录页面并在身份验证后返回 mvcapp。在 mvcapp 上有我的 singlepageapp 的链接。我单击该链接,我已经登录 IDP,因此我的 api 从 IDP 接收 saml 令牌,api 使用令牌并制作一个 jwt 令牌并将我重定向到 singlepageapp 以及查询字符串中的 jwt 令牌(使用 saml 令牌创建)。

现在用户从 mvcapp 中单击注销按钮,注销请求将转到 IDP 注销端点。IDP 知道,该用户已登录这两个应用程序,并且 IDP 具有这两个应用程序的注销端点。现在 IDP 为 singalpageapp 发出注销请求(注销端点是 api 端点)。api 没有任何 cookie,但 singalpageapp 在浏览器上有 jwt 令牌。所以我的问题是,api 将如何删除 jwt 令牌。以便用户从两个应用程序中注销。

标签: c#single-sign-onopenid-connectitfoxtec-identity-saml2single-logout

解决方案


首先,如果 IdP 同时支持 SAML 2.0 和 OIDC (OpenID Connect),最好的解决方案是 mvcapp 使用 SAML 2.0,而 singlepageapp 使用 OIDC。或者也许两个应用程序都使用 OIDC。

或者,我认为解决方案是让用户 OIDC 保护单页应用程序,而不仅仅是 JWT,实际上 api 也成为 IdP。因为 api 充当 IdP,所以 api 需要保持用户会话,但不可能使用 cookie。

OIDC 通过OpenID Connect 会话管理支持用户会话和注销。该标准还支持会话状态更改通知,其中单页应用程序客户端可以调用 api IdP 以验证 JWT 中的用户会话是否仍处于活动状态。


推荐阅读