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

William Denniss
Owen Campbell-Moore

我们都非常喜欢原生应用的这种要求:您只需登录一次,然后它就会记住您的决定,直到您告诉它们要退出为止。遗憾的是,Web 并不总是这种方式

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

但是,即使您希望延长会话的持续时间,但某些网站不会在每次请求时验证用户的身份验证(换句话说,发出会话 Cookie 后便无法撤消)。这通常会导致会话持续时间较短,系统会强制用户频繁登录,以便重新验证其身份验证,这样一来,更改密码之类的操作就足以使现有会话在已知时间内失效。

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

关于迁移到安全的 Web 长时间会话的实用方案

这篇博文描述了我们提议的一个名为 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 重复使用以进行 Web 身份验证。

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

我们发布了一个示例客户端和后端。希望您能亲自尝试回答关于会话管理的调查问卷