firebase-authentication - 来自 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
,因为客户端可以使用浏览器的开发工具或类似工具轻松插入操纵的令牌。
解决方案
是的,ID 令牌会自动包含在请求中并在函数中进行验证。使用可调用函数时,您不必编写代码来验证 toekn。
推荐阅读
- python - Discord.py 在命令方法上使用多个权限检查装饰器
- javascript - 如何从我的 JavaScript 应用程序调用 API
- java - 正确忽略 InterruptedException
- haxe - Haxe 4.1.5 保存数据?
- c++ - LoadLibrary Dll 注入器获取路径输入并“加扰”
- ruby-on-rails - 将空字符串转换为 int 的更短方法,然后进行钳位
- javascript - 网站按钮点击在移动设备上不起作用
- sql-server - 如何从另一台服务器中的 Springboot 应用程序从一台服务器中连接到 SQL Server 数据库?
- angular - 如何实现永久地址复选框与 Mat-Formfield 中的住宅地址相同。和步进器我尝试了各种方法但不能
- python - keras conv1d 图层自定义填充