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

VS Code扩展部署时如何安全存储Gemini API密钥?

解决VS Code扩展调用Gemini API的密钥安全问题

针对你不想让用户手动输入密钥、同时避免代码硬编码密钥的需求,以下是几个适合新手的实用方案:

方案1:环境变量+VS Code工作区配置(零额外服务,最易上手)

核心思路是让用户通过系统环境变量配置密钥,扩展优先读取环境变量,同时支持工作区配置作为补充,既不用硬编码,也不用用户每次手动输入。

实现步骤:

  1. 在扩展的package.json中声明配置项,引导用户使用环境变量:
    "contributes": {
      "configuration": {
        "title": "Gemini Extension",
        "properties": {
          "gemini.apiKey": {
            "type": "string",
            "description": "Gemini API密钥,推荐通过环境变量`GEMINI_API_KEY`设置,此处仅作临时项目配置",
            "default": "",
            "scope": "window"
          }
        }
      }
    }
    
  2. 扩展代码中优先读取环境变量,再 fallback 到配置项:
    import * as vscode from 'vscode';
    import { GoogleGenerativeAI } from '@google/generative-ai';
    
    export function activate(context: vscode.ExtensionContext) {
      // 优先从系统环境变量获取密钥
      let apiKey = process.env.GEMINI_API_KEY;
      // 环境变量不存在时,读取VS Code配置
      if (!apiKey) {
        const config = vscode.workspace.getConfiguration('gemini');
        apiKey = config.get<string>('apiKey');
      }
    
      if (!apiKey) {
        vscode.window.showErrorMessage('请配置Gemini API密钥:推荐设置环境变量`GEMINI_API_KEY`,或在扩展配置中填写');
        return;
      }
    
      const genAI = new GoogleGenerativeAI(apiKey);
      // 后续Gemini调用逻辑...
    }
    
  3. 引导用户配置环境变量:
    • Windows:在「系统属性-高级-环境变量」中添加GEMINI_API_KEY,值为你的密钥
    • Mac/Linux:在~/.bashrc或~/.zshrc中添加export GEMINI_API_KEY="你的密钥",执行source ~/.bashrc生效

方案2:简化版Google Secret Manager调用(适合愿意用云服务的场景)

如果想用Secret Manager,新手可以借助**Google应用默认凭据(ADC)**自动处理认证,无需手动管理令牌,避免认证信息暴露。

实现步骤:

  1. 本地开发/用户使用前,安装Google Cloud SDK,运行gcloud auth application-default login完成登录,ADC会自动保存凭据到本地,后续无需手动处理认证
  2. 扩展代码中调用Secret Manager获取密钥:
    import { SecretManagerServiceClient } from '@google-cloud/secret-manager';
    import * as vscode from 'vscode';
    
    async function fetchGeminiApiKey(): Promise<string | null> {
      const client = new SecretManagerServiceClient();
      // 替换为你的Google Cloud项目ID和密钥名称
      const secretName = 'projects/你的项目ID/secrets/GEMINI_API_KEY/versions/latest';
      try {
        const [version] = await client.accessSecretVersion({ name: secretName });
        return version.payload?.data?.toString() || null;
      } catch (err) {
        vscode.window.showErrorMessage('获取Gemini密钥失败:' + err);
        return null;
      }
    }
    
    export async function activate(context: vscode.ExtensionContext) {
      const apiKey = await fetchGeminiApiKey();
      if (!apiKey) {
        return;
      }
      // 后续Gemini调用逻辑...
    }
    
  3. 用户只需要登录一次Google Cloud账号,后续扩展会自动通过ADC获取认证凭据,无需重复输入密钥或令牌

方案3:自动引导式配置(折中兼顾体验与安全)

如果用户既不想配置环境变量,也不想用云服务,可以在扩展首次激活时弹出引导窗口,让用户选择导入环境变量或手动输入一次,输入后自动存入VS Code安全存储,后续启动自动读取。

实现步骤:

import * as vscode from 'vscode';
import { GoogleGenerativeAI } from '@google/generative-ai';

export async function activate(context: vscode.ExtensionContext) {
  // 先从VS Code全局安全存储读取密钥
  let apiKey = context.globalState.get<string>('geminiApiKey');
  
  if (!apiKey) {
    const option = await vscode.window.showQuickPick(
      ['从环境变量导入', '手动输入密钥'],
      { placeHolder: '请配置Gemini API密钥' }
    );

    if (!option) {
      return;
    }

    if (option === '从环境变量导入') {
      apiKey = process.env.GEMINI_API_KEY;
      if (!apiKey) {
        vscode.window.showErrorMessage('未找到环境变量`GEMINI_API_KEY`,请先配置');
        return;
      }
    } else {
      apiKey = await vscode.window.showInputBox({
        prompt: '输入Gemini API密钥',
        password: true,
        ignoreFocusOut: true
      });
      if (!apiKey) {
        return;
      }
    }

    // 将密钥存入VS Code安全存储,下次启动自动读取
    await context.globalState.update('geminiApiKey', apiKey);
  }

  const genAI = new GoogleGenerativeAI(apiKey);
  // 后续Gemini调用逻辑...
}

内容的提问来源于stack exchange,提问作者Shanti Lal Prajapat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:13:22