【问题标题】:Which is the correct way to persist Firebase Session after cookie expires?在 cookie 过期后保持 Firebase 会话的正确方法是什么?
【发布时间】:2024-05-20 03:55:02
【问题描述】:

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

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

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

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

我在这里读到的信息:

【问题讨论】:

    标签: node.js firebase firebase-authentication jwt refresh-token


    【解决方案1】:

    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 客户端。

    【讨论】: