如何获取 OpenAI API 密钥?
要使用 OpenAI 提供的 API 服务(如 GPT-4、DALL·E、Whisper 等),你需要获取并妥善保管一个 API 密钥。以下是完整、推荐的获取流程和注意事项。
获取 OpenAI API 密钥的步骤
注册 OpenAI 账号
访问 OpenAI 官方注册页面 并完成账号注册流程。你可以使用邮箱或通过 Google、Microsoft 等社交账户快捷登录。
登录 OpenAI 控制台
登录后,访问 API 密钥管理页面。
创建新的密钥
在页面中点击 “Create new secret key” 按钮。系统会立即生成一个新的密钥,显示在页面上。
复制并妥善保存密钥
密钥只会显示一次。请 立即复制并安全存储(例如使用密码管理器如 Bitwarden、1Password、KeePass 等)。
在代码中使用密钥调用 OpenAI API
你可以通过在请求头中添加 Authorization: Bearer YOUR_API_KEY 来调用 API,例如:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
使用密钥的注意事项
- 安全性:不要将密钥硬编码在客户端代码中,也不要上传到公共仓库(如 GitHub)。
- 权限管理:目前所有 API 密钥具有账号级别的完全权限,OpenAI 暂不支持细粒度权限控制。
- 密钥轮换:如果你怀疑密钥泄露,应立即在密钥管理页面 删除该密钥并生成新密钥。
- 限制和计费:所有 API 调用会计入你的使用配额,请确保你的账户已绑定有效的付款方式。你可以在 用量页面 查看实时用量数据。
示例
在 Node.js 中设置密钥
const { OpenAI } = require("openai");
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY, // 推荐使用环境变量
});
在 Python 中使用密钥
import openai
openai.api_key = "your-api-key"
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello!"}]
)
推荐做法
- 使用 环境变量 管理密钥。
- 对密钥使用访问限制(如将其绑定到某一服务端部署环境)。
- 配合工具(如 GitHub Secrets、Vercel 环境变量配置)避免密钥暴露。
参考资料
如何安全地存储 OpenAI 的 API 密钥?
正确安全地存储 API 密钥(如 OpenAI 的 sk-... 形式的密钥)对于防止泄露、滥用甚至账单爆炸至关重要。以下是关于如何存储和管理 API 密钥的最佳实践。
绝不能暴露在前端代码中
切记,不要将 API 密钥写死在如下位置:
- HTML/JS 前端代码(即使是构建后的 bundle 文件)
- 浏览器开发工具中可见的 API 调用参数
- Git 仓库(即使是私有仓库也不推荐)
前端访问的是你后端提供的接口,而不是直接调用 OpenAI 的 API。
使用环境变量(推荐方式)
最安全的方式是在服务器端使用环境变量。例如,在 Node.js 项目中,你可以这样使用:
.env 文件内容:
OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Node.js 中使用:
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
并结合 .gitignore 确保 .env 文件不会被上传:
.env
在部署平台中设置环境变量
不同部署平台支持不同方式配置环境变量:
平台 | 设置方式 |
---|---|
Vercel | 项目设置 > Environment Variables |
Netlify | Site settings > Environment |
AWS Lambda | 配置中的环境变量部分 |
Docker | 使用 -e 参数或 .env 文件 |
访问控制与最小权限原则
- 不要共用密钥给所有用途。
- 使用 OpenAI 的 API Key 权限控制(组织级别) 管理多个密钥。
- 如果你有多个项目,建议为每个项目创建独立的密钥,并记录用途。
密钥轮换与监控
- 定期更换密钥,尤其在团队中多人开发时。
- 使用 OpenAI 提供的 Usage 页面 监控流量,防止异常调用。
- 若怀疑泄漏,应立刻在 API 密钥管理页 吊销原密钥并生成新密钥。
常见错误及风险
错误做法 | 风险 |
---|---|
在 React/Vue 项目中调用 OpenAI API 并携带明文密钥 | 密钥会暴露在浏览器中,被任何用户查看和滥用 |
把密钥写在 .env 文件中但未加入 .gitignore | 被上传到代码仓库,可能被开源爬虫扫描并盗用 |
在 Postman 分享配置文件时未清除密钥 | 密钥可能意外泄露给团队外人员 |
参考文档
怎么在代码中安全地设置和使用 OpenAI API 密钥?
在使用 OpenAI 的 API 时,最核心的一步是正确、安全地设置和使用 API 密钥。这直接关系到服务的调用是否成功、密钥是否会泄漏、代码的可维护性与安全性。以下从实践角度为你详解如何在不同语言和环境中设置 API 密钥。
推荐方式:通过请求头设置 API 密钥
无论你使用哪种编程语言或 HTTP 客户端,OpenAI API 的身份验证方式都一致:使用 Authorization 请求头并附带 Bearer 类型的密钥。
Authorization: Bearer YOUR_API_KEY
例如,使用 curl 调用:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Hello"}]
}'
在代码中设置 API 密钥
1. Python(推荐使用环境变量)
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello"}]
)
在 .env 文件中存储密钥,并使用 python-dotenv 读取
使用 dotenv 加载环境变量:
# .env 文件中
# OPENAI_API_KEY=your_actual_key
# main.py
from dotenv import load_dotenv
import os
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
res = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "你好"}]
)
print(res.choices[0].message.content)
2. Node.js / JavaScript
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
推荐通过 .env + dotenv 库管理密钥:
npm install dotenv
require('dotenv').config();
3. Bash 脚本中使用环境变量
export OPENAI_API_KEY=your_api_key_here
curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4", "messages": [{"role": "user", "content": "你好"}]}'
使用密钥的替代方式(仅用于某些高级用途)
- 如果你使用 OpenAI API 代理服务,可以通过配置不同代理路径动态注入密钥。
- 在某些企业环境中,也可以通过反向代理统一注入密钥并屏蔽真实密钥。
参考资料
为什么会出现 “No API key provided” 或 “token is not from valid issuer” 错误?
这两个错误提示分别意味着请求缺少 API Key,或者使用了格式/来源错误的 Token。以下是对这两个错误的详细解释、常见原因及解决方案。
“No API key provided”:未提供 API Key
这是 OpenAI 接口最常见的错误之一。通常意味着你在调用 API 时未在请求头中正确传递 API Key。
常见原因
- 忘记在请求头中添加 Authorization 字段。
- 错误地拼写或格式化 API Key(例如,缺少 Bearer 前缀)。
- 配置文件或环境变量中未正确加载 API Key。
- 使用了已撤销或过期的 API Key。
正确做法
你应该在请求头中传递如下字段:
Authorization: Bearer YOUR_API_KEY
cURL示例:
curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Hello!"}]
}'
注意:YOUR_API_KEY 必须是从 OpenAI API 密钥页面 创建的,并处于激活状态。
“token is not from valid issuer”:令牌不是来自合法颁发者
该错误说明你提供的 Token 无法通过 OpenAI 的验证机制。主要原因是使用了错误类型的 Token。
常见原因
- 错误地将登录时获取的 OAuth 访问 Token 用作 API Key。
- 在系统中混淆了用户授权 Token 和 OpenAI API Token。
- 将组织管理后台中的 Session Token 误用。
正确做法
OpenAI API Key 是一种静态密钥(以 sk- 开头),用于服务端调用 API。它不能被用户的登录 Token 或 OAuth Token 替代。
请确保你使用的密钥形如:
sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
而不是 JWT、OAuth、或 Session Token。
参考资料
如何管理 OpenAI 的组织(Organization)ID 和团队成员权限?
OpenAI 提供了组织(Organization)层级的账户管理机制,支持协作团队开发和集中化权限管理。
组织 ID 是什么?如何获取?
组织 ID 是 OpenAI 分配给每个账户或团队的唯一标识符,主要用于多账户协作和 API 计费隔离。通常在调用 API 时,Header 中可添加该 ID 来指定组织上下文:
OpenAI-Organization: org-xxxxx
你可以在 OpenAI 组织设置页 中查看或复制你的组织 ID。
如何邀请成员加入组织?
账户管理员(或拥有者)可以按以下步骤添加成员:
- 登录 OpenAI 平台;
- 前往 Settings > Organization 页面;
- 点击 "Invite members";
- 输入成员的邮箱地址;
- 成员接收邀请后登录即可成为组织成员。
每位成员都将拥有自己的登录凭证与独立 API 密钥。
是否可以为成员分配不同的权限?
目前,OpenAI 的组织结构权限较为扁平,所有成员在组织中拥有相同的 API 使用权限,但不能访问彼此的 API 密钥或计费数据。
角色目前主要有两类:
- Owner:可添加/移除成员、查看所有账单和使用情况、修改付款方式。
- Member:可独立使用 API,拥有各自的密钥,但无法管理组织或成员。
管理员可以在 成员管理界面 中,随时撤销成员的访问权限或重设组织角色。
成员的 API 密钥是否共享?
不共享。每位成员需要登录后独立生成 API 密钥,并以 sk- 开头,该密钥仅限个人使用。
最佳实践:
- 不应共享密钥;
- 不应将密钥硬编码在前端代码中;
- 应通过环境变量进行密钥注入。
安全最佳实践与建议
为了保障组织的安全和成员的隔离性,OpenAI 建议如下:
- 每位成员应使用独立密钥;
- 定期撤销旧密钥并生成新密钥;
- 如需删除成员,管理员可立即移除其访问权限;
- 使用 Usage Dashboard 监控成员用量,避免滥用。
常见问题及处理建议
如何从组织中移除某个成员?
管理员可在 组织设置 > Members 页面中点击成员旁的“Remove”按钮,即可移除。
被移除的成员还能使用旧密钥吗?
一旦成员被移除,其密钥将立即失效,无法继续调用 API。
多个组织账户如何切换?
若用户被邀请加入多个组织,可在使用 API 时通过设置 OpenAI-Organization Header 明确调用哪个组织的配额。
示例:使用组织 ID 发起 API 请求
curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "OpenAI-Organization: org-xxxxxxxxxxxxxxxx" \
-d '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Hello"}]
}'
相关参考链接
是否支持 OAuth2 或第三方认证?
OpenAI 自身 API:仅支持 API Key
截至目前(2025年),OpenAI 的 API 接口仅支持基于 API Key(Bearer Token) 的身份认证方式,尚不支持标准的 OAuth2 授权流程。这意味着:
- 所有 API 请求必须携带一个以 sk- 开头的 私密密钥(Secret Key);
- 不支持通过 OAuth2 协议进行用户授权登录;
- 无法直接集成第三方登录服务(如 Google OAuth、GitHub OAuth)用于 API 调用权限管理。
插件机制中的 OAuth 支持
虽然 OpenAI API 本身不支持 OAuth2,但 ChatGPT 插件系统支持 OAuth2 授权机制,允许用户在对话中授权访问第三方服务。这仅限于 ChatGPT 网页版用户通过 UI 与插件交互时使用,并不适用于开发者调用 API 时的身份认证。
插件的 ai-plugin.json 清单中可配置 auth.type: oauth,包括授权 URL、令牌 URL、作用域等标准字段。这类机制仅用于 ChatGPT 插件系统,而非通用 OpenAI API 认证。
企业环境认证方案
对于企业客户,OpenAI 提供更细粒度的密钥和组织权限管理机制,但也未采用 OAuth。用户可:
- 创建多个独立密钥,分配给不同服务;
- 管理组织成员权限(如读取、写入权限);
- 配置 API key 级别的访问控制和审计日志。
Azure OpenAI:支持 OAuth2 via Azure Active Directory
如果您使用的是 Azure OpenAI 服务,则可以通过 Azure API Management 或应用本身整合 OAuth2 授权流程。这提供更强的访问控制、审计以及多用户管理能力。
常见实现方式包括:
API Management 配合 Azure AD OAuth2
- 创建应用注册(App Registration),配置授权端、token 端点。
- 配置 API 管理策略(Azure API Management policy)以在请求中验证 JWT token 或将 token 传递给后端 Azure OpenAI 服务。
Managed Identity
对于同一租户内部服务,推荐使用 Azure 系统托管身份(Managed Identity),通过它获取 access token 并调用服务。
Azure OpenAI 的密钥与 OpenAI 公版密钥有何不同?
二者的区别概览
Azure OpenAI 和 OpenAI 公版服务在密钥机制和调用方式方面存在关键差异,具体体现在认证方式、调用结构和配置项上。
特性 | OpenAI 公版 API | Azure OpenAI 服务 |
---|---|---|
API | 密钥前缀 以 sk- 开头 | 无特定前缀 |
API 网关 | https://api.openai.com/v1/... | https://{your-resource-name}.openai.azure.com/openai/deployments/... |
认证方式 | Bearer Token(Header中设置) | Azure Resource Key(Header中设置) |
模型选择方式 | 通过 model 参数指定,如 gpt-4 | 通过 Azure Portal 部署后,使用 deployment_name 指定 |
区域性支持 | 全球单入口 | 需选择部署地区(如 East US、West Europe 等) |
使用配置参数 | 简洁,仅需 model 和 messages | 需同时提供 api-key、endpoint、deployment_name 等 |
SDK 支持 | OpenAI 官方 SDK | 使用 Azure SDK 或构造原生 REST 请求 |
实际调用方式对比示例
OpenAI 公版 API 示例(Python)
import openai
openai.api_key = "sk-..."
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
Azure OpenAI 示例(Python)
import openai
openai.api_type = "azure"
openai.api_base = "https://your-resource-name.openai.azure.com/"
openai.api_version = "2024-02-15-preview"
openai.api_key = "your-azure-api-key"
response = openai.ChatCompletion.create(
engine="your-deployment-name", # 注意这里不是 model
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
- Azure 中用 engine 替代了 model,它实际上是你在 Azure Portal 部署时起的模型别名。
- 成本控制:Azure 按使用量计费,定价策略可能与 OpenAI 官方不一致,请参考 Azure 定价页。
什么是 ChatGPT API 的 TLS 加密机制?它是否需要开发者配置证书?
所有与 OpenAI API 的通信均通过 HTTPS 加密通道 进行,具体使用的是 TLS(传输层安全协议)1.2 或更高版本。这确保了客户端与 OpenAI 服务器之间的数据传输的机密性与完整性。
1. OpenAI API 默认启用 HTTPS(TLS 1.2+)
所有请求都会自动使用 TLS 加密,开发者无需额外部署或配置任何证书。OpenAI 使用的是由可信根 CA 签发的有效证书,现代客户端系统(包括 Python 的 requests 库、Node.js、curl 等)会自动信任这些证书。
2. 本地服务器与客户端的要求
虽然无需你去配置 OpenAI 的 TLS,但你自己的运行环境也必须满足以下条件:
- 系统需支持 TLS 1.2 或以上版本(大多数现代操作系统与运行时默认支持)
- 不要屏蔽 OpenAI 的证书链(例如自定义过期的 CA 配置)
- 使用官方客户端(如 openai Python/JS SDK)或标准 HTTPS 客户端库可自动处理证书验证
- 在需要中间代理(如企业内网)场景下,应允许代理通过验证 OpenAI 的根证书
3. 本地应用部署时的 TLS 注意事项
虽然 OpenAI 的通信是安全的,但如果你自己部署了中间服务(如反向代理、API 网关),则需要配置你自己的 TLS 证书。
最佳实践建议
- 使用官方 SDK(如 openai-python、openai-node),由其内部处理 TLS 与请求构造。
- 不要禁用 SSL 校验(如 verify=False),这样会破坏 TLS 安全机制,易受中间人攻击。
- 如果使用企业代理或 VPN 访问 OpenAI,需要配置信任代理的中间证书。
- 若出现 TLS 握手失败或证书错误,建议:
- 更新本地根证书(如 certifi)
- 检查系统时间是否准确
- 避免使用过时的客户端(Python <3.6、Node <12)
为什么安全策略对使用 OpenAI API 至关重要?
避免前端暴露密钥
OpenAI API 使用基于 Bearer 的认证机制,密钥形如 sk-xxx...,若被公开,任何人都可以调用 API:
- 不要将 API Key 写入前端代码中
- 不应将其提交到公共 GitHub 仓库
- 推荐将密钥放入后端服务器的环境变量中
为每位开发者生成独立密钥
使用 OpenAI API 密钥管理面板 为每位开发人员生成独立密钥,并:
- 限定权限或用途
- 若员工离职或密钥泄露,只撤销该密钥即可,不影响整体服务
- 便于审计日志跟踪请求来源
定期轮换密钥
避免使用同一个密钥长时间不变:
- 设定定期轮换策略(如每月或每季度)
- 使用密钥管理服务(如 AWS KMS、GCP Secret Manager)集中管理密钥生命周期
- 对旧密钥及时废弃
配置访问权限和使用配额
使用 OpenAI Dashboard 中的配额和速率限制:
- 防止密钥泄露后造成大额费用
- 可设置账号额度报警
- 企业用户可启用更细粒度访问策略和使用报告
使用 HTTPS 与 TLS 通信
所有 OpenAI API 请求必须使用 HTTPS(TLS 1.2+),这已在服务端默认强制:
- 开发者不需要手动管理 SSL 证书
- 本地测试或内部服务器同样应启用 TLS
开启审计日志和用量监控
推荐对以下内容打日志:
- 请求时间戳
- 使用的 API 密钥 ID
- 请求 IP 地址
- 请求内容摘要
- 响应代码和 token 用量
对于企业用户,OpenAI 提供完整的审计日志与合规 API 访问功能。
一旦发生泄露,如何应对?
如果怀疑密钥泄露或滥用,立即执行以下操作:
进入 API 密钥控制台
撤销当前密钥
生成新密钥,并替换应用配置
检查调用日志,确认滥用情况
如情况严重,联系 OpenAI 支持
企业级安全增强选项(OpenAI Enterprise)
- 数据不用于训练:API 调用默认不会被用于训练模型(除非明确同意)
- 数据保留策略:可申请开启「零数据保留」(Zero Data Retention)政策
- 合规协议支持:支持签署 GDPR、HIPAA、SOC2 等合规文件
- 端到端 TLS 加密:全链路强制加密,防止中间人攻击