我们有一个使用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中的会话存储空间。现在这个工作正常。