首页 > 解决方案 > 来自 HTTPS 可调用 Cloud Functions 的“上下文”是否可信?

问题描述

我正在使用 Cloud Functions 在服务器端处理对 Cloud Firestore 的读/写。云函数由 Web 应用程序中的客户端使用 HTTPS 可调用函数触发。

使用 HTTPS 调用 Cloud Functions 时,客户端调用“context”会发送一个参数,其中包含用户身份验证信息。例如,服务器上的 Cloud Functions 可能如下所示:

// Saves a message to the Firebase Realtime Database but sanitizes the text by removing swearwords.
exports.addMessage = functions.https.onCall((data, context) => {
  // ...
});

但是,由于context是由客户端传递的,并且客户端可以传入一个操纵的 ID 令牌,我是否需要在信任并使用类似于context.auth.uid与我的数据库交互之类的东西之前始终执行 ID 令牌验证?

我说的 ID 令牌验证是这样的:

// idToken comes from the client app
admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    var uid = decodedToken.uid;
    // ...
  }).catch(function(error) {
    // Handle error
  });

本质上,我想知道 Firebase 是否在context使用 https 调用传递时自动执行 ID 令牌验证,因此我可以继续并相信如果客户端进行了操作context,https 调用将由于令牌验证失败而失败。或者,我是否需要每次都在服务器上显式地进行手动 ID 令牌验证以检查 的完整性context,因为客户端可以使用浏览器的开发工具或类似工具轻松插入操纵的令牌。

标签: firebase-authenticationgoogle-cloud-functions

解决方案


是的,ID 令牌会自动包含在请求中并在函数中进行验证。使用可调用函数时,您不必编写代码来验证 toekn。


推荐阅读