如何在多个选项卡之间共享 oauth 令牌

时间:2021-06-29 09:33:05

标签: oauth tabs

我的 Angular 应用程序使用 oauth 令牌(添加在每个请求的头授权中)来联系 REST 服务。我们使用 angular-auth-oidc-client。令牌存储在会话存储中,以便在浏览器关闭时将其删除。

如何处理同一个应用程序(同一个域)的多个标签页?就我而言,IDP 提供的会话 cookie 的生命周期很短(1 小时),但 Oauth 令牌本身的有效期为 1 天。因此,如果我在 1 小时内使用我的 web 应用程序打开另一个选项卡,它将获得一个新的 Oauth 令牌。过了这个延迟,新标签会重定向到登录屏幕,这就是为什么我搜索一种方法来为每个标签保留令牌。

可以通过以下方式打开标签:

  • 用户打开一个空标签页并输入 webapp 的 url:会话存储最初是空的
  • 用户点击 target="_blank" 和 href="same url as webapp" 的链接:会话存储为空
  • window.open:新标签获取会话存储的精确副本

可能的解决方案:

  • 通过在每次修改时复制会话存储来在多个选项卡之间共享令牌吗?它意味着有一个标签,它成为“领导者”并将令牌分发给其他“追随者”标签(例如,通过使用广播频道)。稍后可能会出现另一个问题:如果我们使用刷新令牌,所有选项卡将同时使用刷新令牌(除非我们在会话存储中使用一种在所有选项卡之间共享的标志,但它可能不是 100% 防弹的).
  • 使用充当代理的 Service Worker

您是否看到了更清洁的解决方案?

谢谢。

0 个答案:

没有答案