我正在使用Cloud Functions在服务器端处理对Cloud Firestore的读取/写入。云端功能由网络应用中的客户端使用HTTPS可调用功能触发。
使用HTTPS调用Cloud Functions时,从客户端调用“上下文”发送的参数将携带用户身份验证信息。例如,服务器上的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令牌,因此我是否需要始终执行ID令牌验证,然后才能信任并使用context.auth.uid
之类的东西来与我的数据库进行交互?
我正在谈论的ID令牌验证是这样的:
// idToken comes from the client app
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
var uid = decodedToken.uid;
// ...
}).catch(function(error) {
// Handle error
});
基本上,我想知道Firebase在使用https调用传递context
时是否自动执行ID令牌验证,因此我可以继续相信如果客户端操作了context
,https调用将会由于令牌验证失败而失败。或者,我是否需要每次都在服务器上显式地进行一次手动ID令牌验证,以检查context
的完整性,因为客户端可以使用浏览器的devtool或类似工具轻松插入可操纵的令牌。>
答案 0 :(得分:1)
是的,ID令牌自动包含在请求中并在功能中进行了验证。使用可调用函数时,无需编写代码来验证脚趾。