Firebase verifyIdToken() 在缓存时是否需要为每个新令牌调用 Firebase API?

J.F*_*.F. 2 google-api firebase firebase-authentication firebase-admin

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

项目工作正常,但我想知道verifyIdToken()缓存时如何工作。

现在,该项目的工作方式如下:

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

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

我读过这个问题,其中说:

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

另外,这个答案说:

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

以及评论:

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

但是,下载并缓存什么证书?来自用户还是项目?

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

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

提前致谢。

Hir*_*aka 5

但是,下载并缓存什么证书?来自用户还是项目?

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

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

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

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

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

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