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

William Denniss
Owen Campbell-Moore

我们都喜欢原生应用只要求您登录一次,然后会记住您的登录信息,直到您告知应用您想退出账号。遗憾的是,网络并不总是如此运作。

现在,设备(尤其是移动设备)变得更加个性化,越来越多的网站通过 HTTPS 发送所有流量,从而降低令牌被盗的风险,因此网站应重新考虑其短时有效的 Cookie 政策,并采用更符合用户需求且时长更长的会话。

不过,即使您希望延长会话时长,某些网站也不会在每次请求时验证用户的身份验证(换句话说,一旦发出会话 Cookie,就无法撤消)。这通常会导致会话时间较短,因为系统会强制用户频繁登录,以便重新验证其身份验证,从而允许密码更改等操作在已知的时间内使现有会话失效。

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

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

接下来,本文将介绍我们提出的一项新技术,我们称之为 2 个 Cookie 分发 (2CH)。我们希望通过这篇文章,听取社区反馈,了解这种方法是否有益,如果有益,我们将与业界合作,记录使用 2CH 的最佳实践。

服务工件是一种新技术,Chrome、Firefox、Opera 等多款浏览器都支持该技术,Edge 也即将支持该技术。借助这些插件,您可以通过客户端上的通用代码点拦截来自您网站的所有网络请求,而无需修改现有网页。这样,您就可以为已登录的用户设置“2CH worker”,该 worker 可以拦截您的网页发出的所有网络请求,并像移动应用一样执行令牌交换。

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

如果您的服务器还没有这样的端点,则可以仅出于浏览器会话管理目的创建一个。

2 个 Cookie 分发序列

使用服务工件的双令牌模式与 OAuth 2.0 模式非常接近,如果您已运行 OAuth 令牌端点,则可以将其与服务工件一起重复使用,以进行 Web 身份验证。

您可能还会想知道,如果用户访问不支持服务工件的浏览器,会发生什么情况。如果您采用上述方法,用户将不会感受到任何差异,并且会继续获得短时会话。

我们已发布示例客户端和后端。我们希望您亲自试用该功能,并回答有关会话管理的调查问卷