首页 文章

打开多个浏览器选项卡时,应如何处理用户注销用例

提问于
浏览
4

我正在使用angular-oauth2-oidc与Identity Server 4 .

用户需要通过OpenId Connect Implicit Flow登录 . 我的Id和Access令牌存储在Web浏览器localStorage中 .

当用户打开多个浏览器选项卡,然后用户从其中一个选项卡注销时,我应该如何处理其余选项卡?

我试图捕获session_terminated事件,并尝试将用户注销 . 但是,它不会将用户重定向回登录页面 .

this.oauthService.events.filter(e => e.type ==='session_terminated')
                  .subscribe(e => {this.oauthService.logout();})

有什么建议?谢谢

2 回答

  • 0

    有趣 . 这是我的待办事项列表,看看它是如何与图书馆一起工作的 .

    我已经创建了a dedicated playground example repo,非常适合测试它 . 我发现有两个不同的场景:

    • 用户自己转到IdentityServer,然后单击“注销”

    • 用户通过我们自己的应用程序进行单点注销

    仅在第一个场景中,您才会收到 session_terminated 事件 . 在第二个场景(您似乎有)中,您会在第二个选项卡中收到 session_error 事件,因为第一个选项卡:

    • 清除存储的令牌

    • 将您重定向到注销页面(您仍然需要单击注销)

    您可以在这些屏幕截图中看到尽可能多的内容:

    Scenario 1: log out explicitly in a third tab

    from-server

    Scenario 2: log out from the app

    redirection

    所以我认为你的解决方案也是挂钩 session_error ,或类似的东西 .


    脚注:考虑更多关于上述内容,我认为通过监听 localStorage 事件也可能有其他变通方法,并注意 access_token 被另一个标签清除 .

  • 1

    这就是OIDC会话管理规范的全部内容 . 当IDP会话更改/结束时,您可以在客户端通知您,然后做出相应的反应 .

    http://openid.net/specs/openid-connect-session-1_0.html#ChangeNotification

    运行良好,没有任何网络开销,让您完全控制检测到条件时要执行的操作 .

相关问题