首页 > 解决方案 > 如何使用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 呈现后会话应该结束,但我不知道如何实现这一点。

标签: javascript.netangularjsidentityserver4openid-connect

解决方案


重定向到后FrontChannelLogoutUri可能需要清除 iframe 中的会话存储。现在这工作正常。


推荐阅读