使用 Firebase 功能保护 OpenAI 密钥

问题描述 投票:0回答:1

我有一个使用 OpenAI 的应用程序,和许多其他应用程序一样,我的密钥最近被泄露了。

我有这个简单的代码:

const functions = require('firebase-functions');
const OpenAI = require("openai");

const openai = new OpenAI({
    apiKey: functions.config().openai.key,
});

exports.generateText = functions.https.onCall(async (data, context) => {

  try {

    const response = await openai.chat.completions.create({
      messages: [{ role: 'user', content:  data.prompt }],
      model: 'gpt-3.5-turbo',
   });

   return { response: response.choices[0].message.content };

   } catch (error) {

    throw new functions.https.HttpsError('internal', 'Failed to generate text from OpenAI.');
  }
});

然后我在我的 iOS 应用程序中调用如下:

let functions = Functions.functions()
func generateText(prompt: String, completion: @escaping (String?, Error?) -> Void) {
    
    functions.httpsCallable("generateText").call(["prompt": prompt]) { result, error in
        
        if let error = error as NSError? {
            if error.domain == FunctionsErrorDomain {
                let code = FunctionsErrorCode(rawValue: error.code)
                let message = error.localizedDescription
                let details = error.userInfo[FunctionsErrorDetailsKey]
                
                print(code, message, details)
                return
            }
        }
        
        if let textResponse = (result?.data as? [String: Any])?["response"] as? String {
            completion(textResponse, nil)
        } else {
            completion(nil, NSError(domain: "AppErrorDomain", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to parse function response"]))
        }
    }
}

但是,由于我不是后端工程师,我想知道这是否安全,或者如何阻止某人使用此端点?例如。这是否会自动限制为从我的应用程序调用?有办法做到吗?

我注意到其他响应要求通过登录对用户进行身份验证,但我宁愿在我的应用程序中避免这样做。

谢谢!

swift firebase google-cloud-functions openai-api
1个回答
0
投票

从 Cloud Functions 的角度来看,这种方法很好。您已将 API 密钥作为环境变量放入配置中。将密钥放入Google Secret Manager会更安全,但你这里的做法是合理的。

除了......问题是如何填充环境变量的配置以及如何存储该信息的“源”。

例如,如果您将 API 密钥放入某种类型的 shell 脚本中,并通过

firebase functions:config:set ....
传递该 API 密钥,那么 shell 脚本中的数据就会存在风险。您需要保护该文件。例如,将其作为明文存储在版本控制系统中将是一种不安全的方法。

© www.soinside.com 2019 - 2024. All rights reserved.