如何使用前通道处理从身份服务器 4 的单点注销?



我们有一个解决方案,它使用用Angular和AngularJS编写的多个SPA。这些应用程序实现 oidc-client-js 库并在身份服务器 4 中进行身份验证。由于 AngularJS 的限制,我们需要在 iframe 中渲染我们的旧版 AngularJS 应用程序。有一个主应用程序允许通过IdentityServer4登录,然后我们可以在该主应用程序中打开不同的SPA。在我们注销然后登录其他用户之前,这工作正常。在主应用程序和用 Angular7 编写的应用程序中,用户是正确的,但是当我们进入在 iframe 中呈现的应用程序时,用户会保持上一个会话。

根据我试图添加的IdentityServer文档FrontChannelLogoutUri通知所有已登录的客户端并结束所有会话。 但是我还没有找到这个注销页面应该做什么。

此外,我试图在注销时清除所有赠款,但没有要清除的赠款。为此,我使用了以下方法:

await _persistedGrantService.RemoveAllGrantsAsync(subjectId, clientId);

来自 IdentityServer 的此方法返回空列表。

var grants = await _interaction.GetAllUserConsentsAsync();

我相信在渲染 FrontChannelLogoutUri 后,会话应该结束,但我不知道如何实现这一点。

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

最新更新