首页 > 解决方案 > 在 cookie 过期后保持 Firebase 会话的正确方法是什么?

问题描述

我一直在处理身份验证、阅读和观看有关它的视频。我基于一个在五分钟后过期的 access_token 和一个永不过期的 refresh_token 构建了自己的 JWT 解决方案。我将该令​​牌存储在 cookie 中,并在需要时使用第二个令牌提供更多 access_tokens。我将 refresh_token 存储在 Redis 中,以便能够在其中一个被泄露/被盗时撤销。

现在,我需要将我的身份验证系统移动到 Google Firebase 以便将我的用户存储在那里,并添加 Google 和 Facebook 登录。但是我发现我需要创建一个 sessionCookie,它会在两周内到期。之后,用户从应用程序中退出,需要再次手动访问。我想以正确的方式(自动,服务器端)刷新该 firebase sessionCookie,但文档对此只字未提。我再次提出自己的解决方案,但我认为这是不对的。

我不想使用getIdToken方法,因为使用自定义令牌,我需要在客户端修改我的每个 api 调用,这不是想法。我想在服务器端进行刷新。

那么,自动刷新 sessionCookie 并保持用户永久身份验证的正确方法是什么?

我在这里读到的信息:

标签: node.jsfirebasefirebase-authenticationjwtrefresh-token

解决方案


Firebase 会话 cookie 一小时后过期,据我所知,这无法修改或更改。主要的收获应该是为什么您需要令牌在 2 周后过期,而不是根据需要从刷新令牌中要求它?

解决方案是生成自定义 JWT 令牌并将其在线存储(可选)并将其传递给客户端。客户端然后使用此密钥进行长期身份验证。这确实意味着所有请求都必须在您的后端进行验证和解码,唯一的问题是本地缓存,这可以通过多种方式完成,包括标准本地存储和 cookie。

流程将是:Firebase Refresh token-> Generate Firebase Auth ID Token-> Get user.uid->Load custom JWT from storageGenerate a new jwt from the admin-sdk.

从具有自定义身份验证的 Admin SDK 文档中,这 3 个主题很有趣。

唯一要弄清楚的是您希望如何存储 jwt 客户端。


推荐阅读