我已启用监视会话(默认情况下启用),以便其他浏览器可以检测到退出登录,并且我可以在同一浏览器的其他选项卡中注销用户。当我从一个选项卡退出时,另一个选项卡会向身份服务器发出静默刷新令牌的请求,并且成功获取。我期望其他浏览器也会退出登录。如果我在其他选项卡中按F5,那么是的,它会自动重定向到登录页面,但不是自动的。
更新
如果要从共享相同身份服务器的其他客户端注销,您可以在您的身份中添加一个Iframe来通知您的客户端有关注销的信息(oidc-client.js支持前端通道注销)。详情请参见frontChannel。
前端服务器端客户端
通过前端通道规范,IdentityServer的“已注销”页面必须呈现一个<iframe>以通知客户端用户已注销,希望得到通知的客户端必须设置FrontChannelLogoutUri配置值。IdentityServer跟踪用户登录的客户端,并在IIdentityServerInteractionService(详情)上提供名为GetLogoutContextAsync的API。此API返回一个LogoutRequest对象,其中包含一个SignOutIFrameUrl属性,您的“已注销”页面必须将其呈现到一个<iframe>中。
后端服务器端客户端
通过后端通道规范,IdentityServer的SignOutIFrameUrl端点将自动触发服务器对服务器调用,传递签名注销请求给客户端。这意味着即使没有前端通道客户端,IdentityServer的“已注销”页面仍必须像上述那样呈现一个<iframe>到SignOutIFrameUrl。希望得到通知的客户端必须设置BackChannelLogoutUri配置值。
基于浏览器的JavaScript客户端
鉴于会话管理规范的设计方式,IdentityServer中无需进行任何特殊操作即可通知这些客户端用户已注销。但是,客户端必须对check_session_iframe进行监视,oidc-client JavaScript库实现了这一点。
之后,您可以在所有客户端上监听oidc-client
的addUserSignedOut事件,并触发signoutRedirect以注销您的客户端。
this._userManager.events.addUserSignedOut(() => {
this._userManager
.signoutRedirect()
.then(resp => {
console.log('Success');
})
.catch(err => {
console.log(err);
});
});
请查看文档以获取更多详细信息
addUserSignedOut
问题,它在登录后立即调用,但在本地工作正常,有什么想法吗? - leobelizquierdo