使用Firebase身份验证验证ID令牌

Ale*_*lex 3 node.js firebase firebase-authentication firebase-admin

我们正在开始开发Web应用程序,并正在考虑使用Firebase身份验证来处理我们的注册流程。但是,我们不确定ID令牌验证的工作方式。似乎可以用Firebase领域之外的令牌来验证用户。我们正在考虑在Google Kubernetes Engine上安装Node.js应用程序-据我所知,它不与Firebase身份验证集成。

Firebase提供了有关如何使用Firebase Admin SDK验证ID令牌的以下示例

// idToken comes from the client app (shown above)

admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    var uid = decodedToken.uid;
    // ...
  }).catch(function(error) {
    // Handle error
  });
Run Code Online (Sandbox Code Playgroud)

我的问题是Firebase是否必须调用其服务器才能验证每个用户请求上的ID令牌(这会增加延迟),或者它是否长时间缓存了验证令牌所需的加密密钥–我就是这么认为的。

Fra*_*len 5

当您调用时verifyIdToken,Admin SDK将使用公共密钥对令牌进行解码,并验证签名是否有效。它从Google的服务器上下载了此密钥,但已缓存了24小时(因为它几乎从未更改过)。验证令牌后,它将检查令牌是否已撤销,这需要再次调用Firebase身份验证服务器。每次调用都会发生此请求verifyIdToken

您可以对照源代码进行检查。

  • verifyIdToken()从Google服务器获取公共密钥。但是这些缓存最多可以存储24小时,因此RPC调用开销得以摊销。吊销检查需要不可缓存的RPC调用,但是SDK仅在明确要求时才执行-`verifyIdToken(idToken,true)`。 (4认同)