javascript - 如何使用frontchannel处理从身份server4单点注销?
问题描述
我们有一个使用 Angular 和 AngularJS 编写的多个 SPA 的解决方案。这些应用程序实现了 oidc-client-js 库并在 Identity Server 4 中进行身份验证。由于 AngularJS 的限制,我们需要在 iframe 中呈现我们的旧 AngularJS 应用程序。有一个主应用程序允许通过 IdentityServer4 登录,然后我们可以在该主应用程序中打开不同的 SPA。这工作正常,直到我们注销然后登录不同的用户。在主应用程序和用 Angular7 编写的应用程序上,用户是正确的,但是当我们进入在 iframe 中呈现的应用程序时,用户会停留在上一个会话中。
根据 IdentityServer 文档,我试图添加
FrontChannelLogoutUri
以通知所有登录的客户端并结束所有会话。但是我还没有找到这个注销页面应该做什么。
此外,我在注销时尝试清除所有授权,但没有要清除的授权。为了实现这一点,我使用了以下方法:
await _persistedGrantService.RemoveAllGrantsAsync(subjectId, clientId);
IdentityServer 中的此方法返回空列表。
var grants = await _interaction.GetAllUserConsentsAsync();
我相信在 FrontChannelLogoutUri 呈现后会话应该结束,但我不知道如何实现这一点。
解决方案
重定向到后FrontChannelLogoutUri
可能需要清除 iframe 中的会话存储。现在这工作正常。
推荐阅读
- reactjs - 仅当输入值等于 for 循环中某个数组的当前值时才更新输入值
- python - 关于连接函数的 Python 问题得到不同的输出
- javascript - How to adapt function to make it target element that invoked it?
- node.js - 无法从远程存储库中读取:从 GitHub 安装 Stencil CLI
- javascript - 如何解决阻止来自我的 Google Apps 脚本的 AJAX 请求资源的“MIME 类型不匹配错误”?
- c - 添加函数时收到“预期的表达式错误”
- python - 每个进程池工作者的进度条的 Tqdm
- javascript - 使用导致错误 SQL 语法的变量添加限制
- mysql - 数据库查询慢
- mongodb - 在聚合管道中设置条件在 mongodb 中不起作用