我可以使用Firebase Auth保护我的云功能,但不使用可调用的云功能吗? (仅HTTP请求)

时间:2019-05-31 13:37:06

标签: firebase firebase-authentication google-cloud-functions

在我的项目中,我使用了一堆GCP服务,包括Firestore,Cloud Functions和Firebase auth。

基于用户能够通过Firebase身份验证服务登录的事实,我认为应该可以检查和验证调用我的云功能的用户。问题是我找不到任何文档或执行该操作的示例。

我知道有一些特殊的 callable functions ,但它不适合我。我正在使用快递处理请求。

是否可以从在客户端(firebase auth)登录的用户检索某种JWT令牌,然后将其与请求一起发送到我的云函数,然后以某种方式进行检查?还是有其他实现上述CF保护的机制?

P.S。 我看到了this question和涉及this example的相关答案,但似乎对我没有帮助,因为该问题与 Firebase Functions 有关,而我所说的是 Cloud函数非常相似,但不完全相同。

谢谢。

2 个答案:

答案 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
}
相关问题