【问题标题】:Does Firebase verifyIdToken() needs a call to Firebase API for each new token when is cached?Firebase verifyIdToken() 在缓存时是否需要为每个新令牌调用 Firebase API?
【发布时间】:2021-01-20 12:25:39
【问题描述】:

我在一个项目中使用 Firebase,我使用 Firebase 令牌 ID 作为不记名令牌来验证用户。

项目工作正常,但我想知道 verifyIdToken() 缓存时的工作原理。

现在,该项目以这种方式运行:

  1. 客户端登录客户端APP并检索Firebase tokenId
  2. 客户端调用服务器使用tokenId作为要授权的Bearer token。
  3. 服务器使用verifyIdToken() 来验证用户。

问题与verifyIdToken() 方法有关,以及是否需要在每个新令牌上调用 Firebase API。

我读过this 问题在哪里说:

VerifyIdToken() 还针对性能进行了优化。它缓存用于验证本地机器上的令牌签名的 Firebase 令牌公共证书(有效期为 6 小时)。除了下载公共证书,不涉及 RPC。

另外,this 回答说:

当您调用 verifyIdToken 时,Admin SDK 使用公钥解码令牌并验证签名是否有效。它会从 Google 的服务器下载此密钥,但会缓存 24 小时

还有评论:

verifyIdToken() 从 Google 服务器获取公钥。但是这些会被缓存长达 24 小时,因此 RPC 调用开销会被摊销。

但是,下载和缓存了什么证书?来自用户或项目?

那么,服务器是否需要在从客户端获取的每个新 tokenId 上调用 Firebase API,或者服务器是否可以在没有互联网连接的情况下使用缓存证书进行解码?

主要目标是减少对 Firebase API 的调用次数,所以我想知道每 24 小时下载一次缓存的 perm,服务器是否可以在没有互联网的情况下解码项目的每个有效令牌。

提前致谢。

【问题讨论】:

    标签: firebase google-api firebase-authentication firebase-admin


    【解决方案1】:

    但是,下载和缓存了什么证书?来自用户或项目?

    ID 令牌使用私钥签名。 SDK 需要获取对应的公钥证书来验证签名。这来自https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

    那么,服务器是否需要在从客户端获取的每个新 tokenId 上调用 Firebase API,或者服务器是否可以在没有互联网连接的情况下使用缓存的证书进行解码?

    服务器在第一次验证令牌时需要能够获取公钥证书。然后,只要缓存的证书保持有效(最长 24 小时),它就可以在没有连接的情况下运行。但这不是你可以控制的,所以你不应该依赖它。

    主要目标是减少对 Firebase API 的调用次数,所以我想知道每 24 小时下载一次缓存的 perm,服务器是否可以在没有互联网的情况下解码项目的每个有效令牌。

    这取决于您的服务器是如何实现和部署的。公钥缓存与 SDK 创建的 Auth 对象实例相关联。如果您的服务器是持久的,Auth 实例将保留在内存中,缓存也将保留。在这种情况下,您可以期望服务器每 24 小时生成大约 1 次 rpc(相同的缓存证书用于验证所有令牌)。

    但是,如果您的服务器是临时的(例如 Cloud Functions),那么 Auth 实例将被多次创建和清理。在这样的部署中,缓存不会产生太大的影响,并且服务器最终会为服务器的每次调用创建一个 rpc。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 2020-05-04
      • 2021-01-23
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      相关资源
      最近更新 更多