如何在 ServiceWorker 中处理 Session 过期

How to handle Session Expiry in ServiceWorker

编辑 1

我在用例中没有明确说明的一件事是浏览器不需要显示用户体验来进行身份验证,或者至少它是可选的。

    var credential = await navigator.credentials.get({
            password: true,  
            mediation: "silent",
            federated: {providers: federatedProviderURL}}
        );

如果用户已从 UA 注销或删除密码,则它将失败(凭据 == null)。

凭证规范作者可能会规定,如果从 ServiceWorker 调用,中介必须是 "silent",否则,如果没有 UI 可用,则:-

错误 - 否UI操作需要 UI 才能完成

但这里的重点是在绝大多数情况下都可以进行无密钥重新认证。

这会改变一切吗?

干杯理查德

原版POST:-

如果我的 ServiceWorker 中的 Fetch 从服务器接收到 401,如果我没有焦点或前台客户端,我该如何重新验证服务器?

注意:我说的是 POST 请求更新服务器,而不仅仅是在网络恢复之前从缓存中读取。

让客户重新成为焦点?对于没有引起这种反应的任何操作的用户来说是可怕的,他们可能不会在那里再次登录。

如果 Background-Synch 收到 401,它会做什么?

如果 navigator.credentials 出现在 ServiceWorker 中就足够了!

永不过期的会话?

其他人在做什么?

我又一次被禁止 W3C/IETF Github :-(

如果有人可以将以下内容添加到 ServiceWorker issues 将会有所帮助:- 请参阅

如果用户会话已过期,则 ServiceWorker 目前没有可用于向服务器重新进行身份验证的机制,因为没有可用于确定凭据的启发式机制。

如果 credentials.get() 可用,则可以透明地进行重新验证。如果联合(比如 Google),那么如果用户已经注销,那么该状态将被接受。

好像之前有讨论过这个。请参阅 GitHub

我认为后台重新验证的频率应该足够低,以至于登录或失败通知是一种适当且用户友好的解决方案。

有什么想法请在那边评论!