Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于保护firebase函数终结点的自定义API密钥_Javascript_Firebase_Google Cloud Functions_Api Key - Fatal编程技术网

Javascript 用于保护firebase函数终结点的自定义API密钥

Javascript 用于保护firebase函数终结点的自定义API密钥,javascript,firebase,google-cloud-functions,api-key,Javascript,Firebase,Google Cloud Functions,Api Key,我需要一个长寿命的API密钥生成器,以仅为授权用户(拥有API密钥的用户)保护我的API端点。 所以我认为Firebase中没有任何内置的东西可以在开箱即用。 我认为每次用户注册并请求API时,我都应该生成一个Firestore文档 钥匙 然后我将使用文档ID作为API密钥,我可以在云函数中验证它。 大概是这样的: const apiKey = req.headers.authorization.split('Bearer ')[1]; const doc = await admin.fires

我需要一个长寿命的API密钥生成器,以仅为授权用户(拥有API密钥的用户)保护我的API端点。 所以我认为Firebase中没有任何内置的东西可以在开箱即用。 我认为每次用户注册并请求API时,我都应该生成一个Firestore文档 钥匙 然后我将使用文档ID作为API密钥,我可以在云函数中验证它。 大概是这样的:

const apiKey = req.headers.authorization.split('Bearer ')[1];
const doc = await admin.firestore().collection('apiKeys').doc(apiKey).get();
if (doc.exists) {
  next();
}
因此,我的问题是:

  • 这是一个好方法吗
  • 你还有其他建议吗
  • 它能伸缩吗

只要确保用户无法获得API密钥列表,这听起来是一种合理的方法


它在几乎任何数据库上都可以很好地扩展,因为您所需要做的只是检查是否存在具有给定ID的文档。

如果您的用户注册,他们就有凭据。他们为什么不直接登录呢?你为什么需要API密钥?@ChrisG因为我正在构建一个特定的服务,其中用户实际上是服务器,我希望他们只需编程我将在注册到他们的服务器逻辑时提供给他们的密钥(=API密钥),这样就更容易与我的API通信。好吧,那么为什么不硬编码登录名呢,让他们先登录?@ChrisG我想让它尽可能容易使用,所以他们唯一需要做的就是注册我的服务,然后获得密钥,对于他们向我的服务器发出的每个post请求,他们也必须添加密钥,以便获得响应。就像你作为产品所有者与Firebase沟通一样。