告别短会话 - 关于使用 Service Worker 改进网络 Cookie 管理的方案

William Denniss
Owen Campbell-Moore

我们都喜欢原生应用要求您登录一次,并记住您,直到您告知它们您想要退出的情形。但遗憾的是,网络并非总是这样工作的

由于设备(尤其是移动设备)更加个性化,并且越来越多的网站通过 HTTPS 发送所有流量,降低了令牌被盗的风险,因此网站应重新考虑其短期 Cookie 政策,并采用更方便用户使用的长期会话。

但是,即使您希望延长会话的持续时间,有些网站也不会在每个请求上验证用户的身份验证(换句话说,会话 Cookie 发出后便无法撤消)。这通常会导致会话时间较短,迫使用户频繁登录,以便重新验证其身份验证,从而实现密码更改、使现有会话在已知时间内失效等操作。

如果您使用此方法,我们提供一种技术解决方案,可帮助您自动重新验证无状态身份验证 Cookie。它的工作原理是拥有一个可用于刷新现有的短期有效的身份验证 Cookie 的辅助长期令牌。通过利用新的 Service Worker 模式,我们可以定期使用长效令牌“签入”,验证用户的身份验证(例如,检查他们最近是否未更改密码或以其他方式撤消会话),以及重新颁发一个新的短期有效的身份验证 Cookie。

关于如何迁移到安全的长会话的网络的实用建议

本文将向您介绍一种我们提议的名为 2-Cookie-Handoff (2CH) 的新技术。我们希望通过本文听取社区反馈,了解此方法是否积极,如果是,也可以与业界合作,编写使用 2CH 的最佳实践。

Service Worker 是一项受 Chrome、Firefox、Opera 等多种浏览器支持的新技术,并且即将在 Edge 中推出。借助它们,您可以通过客户端上的通用代码点拦截来自您网站的所有网络请求,而无需修改现有网页。这样,您就可以为登录用户设置“2CH 工作器”,这些工作器可以拦截您的网页发出的所有网络请求,并像移动应用一样执行令牌交换。

在大多数情况下,您的服务器已有一个端点,移动应用可使用该端点获取新的短期令牌(通常使用 OAuth 协议)。若要在 Web 上启用上述模式,只需更新该端点以了解 Service Worker 何时调用它,然后返回一个新的短期有效的会话 Cookie,其格式与网站上其他网页预期的格式相同。

如果您的服务器没有此类端点,可以专门为浏览器会话管理创建一个端点。

2-Cookie 移交序列

Service Worker 的双令牌模式非常接近 OAuth 2.0 模式,如果您已经运行 OAuth 令牌端点,则可以将其重复用于 Service Worker 以进行网络身份验证。

您可能还想知道,如果用户访问的浏览器不支持 Service Worker,会发生什么情况。如果您实现上述方法,他们只会体验到没有任何变化,并且会继续体验短暂的会话。

我们发布了示例客户端和后端。我们希望您能亲自试用一下填写一份有关会话管理的调查问卷