在我的项目中,我使用了一堆GCP服务,包括Firestore,Cloud Functions和Firebase auth。
基于用户能够通过Firebase身份验证服务登录的事实,我认为应该可以检查和验证调用我的云功能的用户。问题是我找不到任何文档或执行该操作的示例。
我知道有一些特殊的 callable functions ,但它不适合我。我正在使用快递处理请求。
是否可以从在客户端(firebase auth)登录的用户检索某种JWT令牌,然后将其与请求一起发送到我的云函数,然后以某种方式进行检查?还是有其他实现上述CF保护的机制?
P.S。 我看到了this question和涉及this example的相关答案,但似乎对我没有帮助,因为该问题与 Firebase Functions 有关,而我所说的是 Cloud函数非常相似,但不完全相同。
谢谢。
答案 0 :(得分:1)
通过模仿正在使用的protocol,可以非常容易地复制可调用函数的效果。只需在客户端请求的标头中发送用户的令牌,然后从函数的标头中解析该令牌即可。
可调用函数使用标头Authorization: Bearer <token>
,但您可以随意执行任何操作。您只是将数据像其他任何数据一样传递给函数。
答案 1 :(得分:0)
因此,根据道格(Dougs)的建议,在进行了进一步的谷歌搜索之后,我找到了适合我的方法。
在客户端,我们需要检索经过身份验证的用户的ID令牌:
const token = await firebase.auth().currentUser.getIdToken(true);
现在,我们实际上可以将此令牌添加到我们需要的任何请求中。我将在调用HTTP触发的云函数时放入请求标头。例如:
...
const headers = {
'Authorization': token
}
const response = await fetch('CF_URL', {headers});
....
这里最后也是最重要的一点是在服务器端具有验证逻辑(在我的情况下为云功能):
try {
const userData = await admin.auth().verifyIdToken(tokenFromHeaders);
console.log(userData.uid) // here we have uid of verified user
// check user access or do whatever we need here
} catch (e) {
// something go wrong
}