【问题标题】:Should I cache Firebase idTokens for a while, after I authenticated it in node admin sdk?在 node admin sdk 中对其进行身份验证后,我是否应该将 Firebase idTokens 缓存一段时间?
【发布时间】:2020-10-18 10:52:23
【问题描述】:

我正在构建一个应用程序,我需要在其中使用除 Firebase 之外的自己的后端。我也需要在我的后端验证登录用户。所以我找到了this tutorial 这样做。我根据docs 在我的节点的 admin sdk 中发送一个 idToken 并验证此标头。我想我可以在第一次验证 10 分钟或用户会话所需的时间后,用 redis 或仅 js 映射缓存这个令牌,以加快速度,而不是在 10 分钟的会话中验证每个请求。我可能也可以将令牌缓存在手机中一段时间​​?

我的问题是,这会带来什么安全后果?谢谢。

为了澄清我没有使用自定义令牌,我将使用内置的 Firebase 身份验证。

【问题讨论】:

    标签: firebase firebase-authentication firebase-admin


    【解决方案1】:

    惯例是在每次请求时将 ID 令牌发送到您的后端。如该文档中所示,使用 Admin SDK verify the token 并不昂贵。不用花钱。

    通常您应该做的是使用侦听器来检测 ID 令牌何时更改(它将每小时自动刷新一次),并继续使用该令牌,直到 SDK 为您的回调提供一个新令牌。在 Web 客户端中,您应该使用 onIdTokenChanged 注册一个回调,以随着时间的推移获取此令牌的更改。无需持久化或缓存此令牌 - 只需使用最近提供的回调即可。

    【讨论】:

    • 好吧,我想我理解你们两个。因此,验证令牌根本不会向 fb 的服务器发送验证请求,但由于它是 jwt,它可以在我自己的服务器上本地完成吗?我需要关心的是我在客户端上获得了什么令牌,并且我(当然)在每次请求时将它发送到我的后端?但即使在那里我也不应该把它复杂化,只需使用 fb' 函数来获取令牌?
    • 是的,它是 JWT,只需要在您的后端进行解码和检查。
    【解决方案2】:

    一些 Firebase 后端服务会保留一小部分最近的 ID 令牌及其解码结果。因此,如果他们收到完全相同的令牌,他们将使用已经解码的结果。这是一个无风险的操作,因为解码操作是幂等的:相同的输入将始终提供相同的输出。

    【讨论】:

    • 是的,我确定他们使用缓存,但我想保留对 Firebase 后端的请求
    • 解码和验证令牌不需要向 Firebase 的后端发出请求。需要请求的是获取公钥,但这也是可缓存的资源(就像解码的令牌一样)。
    • 好的,我想我明白了!验证令牌不会向 fb 发出请求,它只是一个计算。
    猜你喜欢
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2019-09-01
    • 2019-07-09
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多