NodeJS 如何保护Firebase Cloud Function API Rest?

gdrx4gfi  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(138)

我是在Firebase Cloud Functions中使用API的新手,我需要将我的应用程序与ERP连接起来,以便ERP可以写入Firebase RTDB中名为Test的节点。为此,我编写了以下代码:

const functions = require("firebase-functions");
const admin = require('firebase-admin');
const express = require('express');

const app = express()
admin.initializeApp({
    credential: admin.credential.cert('./credentials.json'),
    databaseURL: "https://testdb.firebaseio.com"
  });

const db = admin.database();

const endpoint = "/api/entradas";
const nodoTestDB = "test/"; 

app.post(endpoint, async (req, res) => {
  try {
    await db.ref(nodoTestDB + req.body.id).set({name: req.body.name });
    return res.status(204).json();    
  } catch (error) {
    console.log(error);
    return res.status(500).send(error);   
  }
});

exports.app = functions.https.onRequest(app);

当我在Postman中测试该函数时,它工作得很好。然而,任何人都可以将URL放入并写入数据库,这不是我们的想法。
如何确保我创建的API的安全性,使其只有ERP可以访问?当我说安全地写时,它意味着:

  1. ERP有一个令牌或类似的东西,只有它知道,并允许它写入数据库。
    1.只允许POST类型的连接
    我看到在名为credentials的服务帐户中,我有一个private_key和一个private_key_id。这些密钥是否用于实现ERP的身份验证?
    Firebase Realtime Rules在这种情况下有帮助吗?我理解不,因为在FCF中,我们使用Firebase-Admin
q43xntqr

q43xntqr1#

将此作为社区wiki发布,以提高社区成员的可见性。
根据@Doug史蒂文森和@most200的评论,您可以为POST使用API密钥或秘密值。此外,您还可以将API Gateway用于您的Cloud Functions,并且您可以使用服务帐户和签名的JWT。其他信息可以通过此link找到。

相关问题