angular - 身份服务器 4 : force user to login with provider after he closes the browser/tab

标签 angular asp.net-core identityserver4

我有一个 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/

相关文章:

javascript - 将 Angular 4 应用程序转换为 PWA

azure - AADSTS90002 : Tenant 'xx' not found. 如果租户没有事件订阅,则可能会发生这种情况

c# 将 System.Data.DataSetExtensions 添加到 .net 核心 web api 应用程序

asp.net-core-mvc - 支持多个同类型的AuthenticationSchemes

IdentityServer4 PostLogoutRedirectUri

javascript - Angular 6 - Material 表 - 获取选定的行值

javascript - 从数组中生成 Angular reducer

c# - EF Core 不会在 SaveChanges()/SaveChangesAsync() 上引发异常

asp.net-core - Asp.Net Core中的多个JWT授权机构/发布者

angular - 在 `FormGroup` 中预填充输入字段 - Angular2