firebase - 我可以使用 Firebase Auth 保护我的云功能,但不使用可调用的云功能。(仅限 HTTP 请求)
问题描述
在我的项目中,我使用了一堆 GCP 服务,包括 Firestore、Cloud Functions 和 Firebase auth。
考虑到用户可以通过 Firebase 身份验证服务登录这一事实,我认为应该可以检查和验证调用我的云功能的用户。问题是我找不到任何文档或如何做到这一点的示例。
我知道有特殊的可调用函数,但它不适合我。我正在使用 express 来处理请求。
是否可以从在客户端登录的用户(firebase auth)检索某种 JWT 令牌,然后将其与请求一起发送到我的云功能,然后以某种方式在那里检查它?或者是否有任何其他机制来实现上述 CF 保护?
PS 我看到了这个问题,但这不是我要问的问题,因为它与Firebase 函数有关,我说的是云函数,它非常相似但不完全相同。
解决方案
因此,根据 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
}
推荐阅读
- google-bigquery - BigQuery - 从同步作业转移到异步作业
- dns - 所有子域的单个 MX 记录 (gsuite)
- python - 如何根据另一个数据框中列的值合并数据框的两列?
- javascript - 我必须在 css 类属性中进行更改,以便充分利用 GPU
- ios - 越狱检测机制未检测到越狱设备
- scala - Spark 以 Json 数组的形式写入 Json
- django - Django中所有产品的页面上都没有显示任何内容
- java - 使用流从数组中项目的实例变量创建列表
- java - 使用 Apache poi 在堆积条上方显示 SUM 值
- ansible - Ansible 设置事实:使用变量评估 json 路径