我有一个 Angular 应用程序和一个 ASP.NET Core Web API,它们使用带有 PKCE 流的代码流客户端和 Identity Server 4 来验证用户身份(使用 Facebook 或 Microsoft 提供商)。如果用户登录,访问 token 将成功更新为刷新 token (静默刷新),因此用户可以不间断地工作。
但是,如果用户没有退出,只是关闭了浏览器或者浏览器的标签页;然后他再次访问该站点,当他单击登录时,他会自动登录,而不是要求提供商登录。因为 cookie 'idsrv' 仍然有效。 idsrv cookie 用于 ASP.NET Core Cookie 身份验证。
如果我明确注销,一切正常,idsrv 和 idsrv-session cookie 将被删除。
我的问题是:如果用户关闭浏览器,我如何强制他重新登录,以确保下一个用户(例如在公共(public)计算机上)不能使用他的凭据?
编辑:我无法删除客户端的 cookie,因为它是一个仅限 HTTP 的 cookie。
结论:我发现了根本原因。 cookie 实际上没有任何问题:它是一个 session cookie,所以它应该在浏览器关闭时被删除。然而,这并没有发生,因为我启用了浏览器设置“从你离开的地方继续”,所以它会记住打开的选项卡,包括 cookie。我关闭了这个功能,cookie 被删除了。
最佳答案
您需要先从'@angular/core'
导入HostListener
使用window unload
事件,在你的app/root组件中通过HostListner
监听这个事件
@HostListener('window:unload', [ '$event' ])
unloadHandler(event) {
// write your remove token/userdetails logic here
// e.g localStorage.removeItem('token');
}
关于angular - 身份服务器 4 : force user to login with provider after he closes the browser/tab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59405249/