You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保护Firebase Cloud Function REST API?仅允许指定ERP访问

解决方案与疑问解答

一、实现API访问控制(令牌认证+仅POST请求)

1. 限制仅POST请求

在Cloud Functions中直接校验请求方法,非POST请求直接返回405状态码:

exports.writeToTest = functions.https.onRequest((req, res) => {
  // 校验请求方法
  if (req.method !== 'POST') {
    return res.status(405).send('Method Not Allowed');
  }
  // 后续写入RTDB的逻辑
});

2. 专属令牌认证

采用自定义API密钥的方式,步骤如下:

  • 先在Firebase项目中设置环境变量存储令牌:
    firebase functions:config:set erp.api_key="your-secure-secret-token"
    
  • 在函数中校验请求头携带的令牌,与环境变量中的值对比:
exports.writeToTest = functions.https.onRequest((req, res) => {
  // 先校验请求方法
  if (req.method !== 'POST') {
    return res.status(405).send('Method Not Allowed');
  }
  // 校验专属令牌
  const requestKey = req.headers['x-erp-api-key'];
  const validKey = functions.config().erp.api_key;
  if (!requestKey || requestKey !== validKey) {
    return res.status(403).send('Unauthorized');
  }
  // 执行写入RTDB逻辑
  admin.database().ref('Test').push(req.body)
    .then(() => res.status(200).send('Data written successfully'))
    .catch(err => res.status(500).send(`Error: ${err.message}`));
});

注意:不要把令牌硬编码在代码里,用环境变量存储避免泄露。

二、疑问解答

1. 服务账号的private_key和private_key_id能否用于ERP认证?

不建议这么做。服务账号拥有Firebase项目的全权限,一旦private_key泄露,整个项目的数据和配置都会面临风险。更安全的方式是使用自定义API密钥,或者为ERP创建一个仅拥有RTDB Test节点写入权限的受限服务账号(即使如此,也不要直接将private_key交付给ERP方,优先用短期令牌方案)。

2. Firebase实时规则是否适用于此场景?

你的判断正确——Firebase实时规则对Admin SDK完全无效。Admin SDK是绕过规则直接操作数据库的,所以实时规则无法限制你通过Cloud Functions中Admin SDK执行的写入操作,必须在Cloud Functions层面做访问控制。

内容的提问来源于stack exchange,提问作者David L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:42:36