c# - 使用 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 令牌。以便用户从两个应用程序中注销。
解决方案
首先,如果 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 中的用户会话是否仍处于活动状态。
推荐阅读
- excel - 条件格式 - 根据另一个单元格文本更改单元格颜色
- css - 如何一起使用 :before 和 :nth-child 选择器
- css - CSS媒体查询不起作用,我已经尝试了一切
- python - 如何根据列中唯一值的数量从字典中删除/删除数据框?
- javascript - 如何在其他地方使用变量的当前值?
- r - 根据组过滤多个事件
- r - 如何根据多列查找查找 data.frame 中最近的行?
- javascript - Google Cloud Speech API 与 Web Speech API 的单词错误率
- python - 机器学习预测用户参与度
- google-cloud-build - Google Cloud Build 非 shell 密钥替换