OpenAI 401 错误属于身份验证问题,但它并不总是意味着同一件事。最快的修复方法是确定请求主机名,确认正在运行的进程实际加载的是哪个密钥,然后使用错误响应正文区分错误的密钥、已撤销的密钥、网关凭据不匹配或 IP 允许列表拦截。
如果你因为请求刚刚失败而搜索如何获取 OpenAI API 密钥,请不要盲目地将新密钥粘贴到同一配置中。首先确认请求是发送到 api.openai.com,还是发送到 OpenAI 兼容网关。这两个端点可能需要不同的凭据。
切勿将完整 API 密钥粘贴到工单、聊天、截图、日志或本清单中。请改为比较安全派生的指纹或提供商显示的掩码后缀。
“无效 API 密钥”是什么意思?
这意味着接收请求的服务无法验证该请求中提供的凭据。对于直接发送到 OpenAI 的请求,官方错误可能会显示 Incorrect API key provided。OpenAI 首先会检查错误中经过掩码处理的密钥是否与预期密钥一致,确保应用程序不会在两个密钥之间切换,并在需要时确认正确的组织配置。OpenAI 的错误密钥指南是该确切消息的权威来源。
仅凭 HTTP 状态码不足以诊断原因。例如,OpenAI 文档说明,即使使用有效密钥,被 IP 允许列表拦截的请求也会返回 HTTP 401,并带有 ip_not_authorized 错误类型。轮换任何密钥之前,请先阅读错误响应正文。OpenAI 的 IP 允许列表指南解释了其中的区别。
五分钟诊断清单
请按顺序完成这些检查。当证据指向某个原因时就停止;同时更改多项内容会使有效修复方案难以验证。
| 检查项 | 应如何安全检查 | 可能的结论 | 下一步操作 |
|---|---|---|---|
| 1. 请求主机 | 重定向后的主机名,例如 api.openai.com 与网关域名的区别 |
直接 OpenAI 密钥被发送到了其他提供商,或反之亦然 | 使用端点运营方签发的凭据 |
| 2. 完整错误响应正文 | 错误消息、type 和 code——切勿查看完整密钥 |
错误/已撤销的密钥、IP 拦截或提供商特定的身份验证规则 | 按下文与响应正文匹配的分支操作 |
| 3. 运行时密钥来源 | 进程环境、部署密钥引用、CI 密钥名称或容器修订版本 | 旧值、空值、截断值或带引号的值仍在运行 | 更新正在使用的密钥来源,并有计划地重启/重新部署 |
| 4. 密钥生命周期 | 密钥是否被删除、撤销、泄露或配置为过期 | 原始密钥已无法再通过身份验证 | 创建替代密钥并安全地进行轮换 |
| 5. 项目和权限 | 项目成员资格、目标项目和密钥权限 | 密钥存在,但没有请求所需的访问权限 | 使用目标项目密钥,或请所有者调整访问权限 |
| 6. 网络控制 | 出站 IP 和 OpenAI IP 允许列表配置 | ip_not_authorized 或基础设施 IP 发生变化 |
更新允许列表;重新测试前留出传播时间 |
1. 在操作密钥之前确认端点
当 SDK 具有可配置的 base_url 时,这是最重要的检查项。
- 发送到
https://api.openai.com/...的请求需要 OpenAI API 凭据。 - 发送到网关或代理的请求需要该网关文档中规定的凭据和身份验证格式。
- 请求在代码中可能看起来“兼容 OpenAI”,但实际仍会被发送到非 OpenAI 主机。
只有在确认请求实际发送到 OpenAI 后,如何获取 OpenAI API 密钥才是相关问题。如果主机是网关,创建新的 OpenAI 密钥无法修复该网关返回的 401 错误。请比较已配置的主机名、SDK 基础 URL、部署变量和所有代理配置;在此过程中不要记录 Authorization 标头。
对于多模型路由设置,请将端点和密钥配置放在一起管理。更全面的OpenAI 兼容 API 故障排除指南涵盖了在此直接凭据测试通过后,针对基础 URL、模型名称、流式传输和路由的检查。
2. 验证应用程序正在加载唯一且预期的密钥
“无效 API 密钥”错误的常见原因往往是普通的配置错误:
- 尽管你的笔记本电脑上存在
OPENAI_API_KEY,但运行中的进程未设置它。 - 某个部署仍引用较旧的密钥版本。
- 实际发出请求的环境没有加载
.env文件。 - 该值包含非预期的引号、空白字符、换行符或复制的占位符。
- 一个代码路径使用库默认值,而另一个代码路径覆盖了密钥或基础 URL。
请在私有调试环境中使用不可逆指纹。这样可以比较不同进程加载了哪个密钥,而无需打印密钥本身:
import crypto from "node:crypto";
const key = process.env.OPENAI_API_KEY?.trim();
if (!key) {
throw new Error("OPENAI_API_KEY is not set in this process");
}
const fingerprint = crypto
.createHash("sha256")
.update(key)
.digest("hex")
.slice(0, 12);
console.info({ keyConfigured: true, keyLength: key.length, fingerprint });
比较本地开发、CI、预发布环境、工作进程和生产环境之间的指纹。请勿比较或存储完整密钥。
3. 使用相同的运行时环境测试直接请求
从发生故障的同一台机器、容器或作业中运行一个最小请求。这样可以将凭据加载问题与应用程序逻辑区分开来。以下命令使用标准 Bearer 请求头,但特意将密钥保留在环境变量中:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"
请谨慎解读结果:
- 同一运行时环境中出现相同的 401,表明问题可能出在凭据、端点、组织/项目设置或网络策略上。
- 成功响应则表明问题出在应用程序配置:例如不同的运行时环境、基础 URL 覆盖、重复创建客户端,或使用了不同的环境变量。
ip_not_authorized响应表示 IP 允许列表问题,并不能证明密钥文本无效。
不要用浏览器请求替代此测试。OpenAI 建议不要在浏览器或移动应用中部署 API 密钥,因为它们可能会被暴露并被他人使用。应改为通过您自己的后端发送请求。OpenAI 的 API 密钥安全指南解释了原因。
4. 检查密钥是否已被撤销、删除、泄露或过期
OpenAI API 密钥仅会在创建时完整显示。如果您没有保存该密钥,就无法从控制台恢复;请创建新密钥并更新应用程序。已删除的密钥无法使用。OpenAI 的密钥管理文章确认了这两种情况。
如果您是在设置新的集成,而不是从事件中恢复,请使用配套的Open AI API 密钥生产指南,获取更全面的设置、安全和运营检查清单。
请将以下事件视为轮换密钥的理由,而不是无限重试:
- 密钥已被删除或被有意撤销。
- 密钥可能已提交到代码仓库、在消息中发送、嵌入客户端应用,或以其他方式泄露。OpenAI 表示,它会禁用检测到出现在公共互联网中或在应用商店应用内泄露的密钥。
- 项目密钥创建时设置了过期日期,且该日期已过。
- 计划轮换后,某个部署仍引用旧密钥。
如需替换,请在目标项目中创建新密钥,将其写入正确的密钥存储,进行部署,确认一个最小请求成功后,再撤销旧密钥。OpenAI 建议设置过期时间并建立定期轮换流程;还建议使用独立密钥,而不是共享团队凭据。查看当前安全建议。
5. 检查项目成员资格和密钥权限
如果您可以创建或查看某个密钥,但团队工作负载仍然失败,请先检查项目边界,不要立即假设密钥格式错误。OpenAI 项目管理 API 密钥、成员、服务账户、模型访问权限和支出限额。用户拥有的密钥可设置为完全、受限或只读权限。OpenAI 的项目指南记录了可用的控制项。
请回答以下问题:
- 该密钥是否与应用程序资源及预期用途属于同一项目?
- 服务账户或用户是否仍是该项目的成员?
- 该密钥是否具备调用所需的端点/资源权限?
- 如果错误指明了某个组织,客户端是否配置为目标组织,而不是过时的组织?
权限和项目问题可能会显示比 Incorrect API key provided 更具体的消息,或返回不同的状态代码。请保留错误的请求 ID 和经过脱敏处理的响应正文,提供给您的平台负责人或 OpenAI Support,而不要猜测原因。
6. 在轮换有效密钥前排除 IP 允许列表问题
OpenAI 组织可以将 API 流量限制为已批准的 IP 范围。来自任何其他地址的请求都会被拒绝,并返回 HTTP 401 和 ip_not_authorized,即使凭据本身有效也是如此。这使得它尤其容易被误诊为其他类型的 401。
如果错误类型是 ip_not_authorized:
- 确定工作负载实际的出站 IP,而不是开发者笔记本电脑的公共 IP。
- 将其与已配置的允许列表进行比较,并检查云 NAT、无服务器出站地址或代理是否发生变化。
- 通过相应的组织控制项更新允许范围。
- 在再次运行最小测试前,等待文档说明的传播时间窗口。
在排除此分支之前,请保持密钥不变。轮换有效密钥只会为事件增加第二个变量。
发生 401 后如何获取 OpenAI API 密钥
如果证据表明该凭证缺失、已删除、已泄露或已过期,请遵循以下简短恢复流程:
- 在目标组织和项目中打开OpenAI API 密钥页面。
- 创建一个具有适合该工作负载的最小访问权限的新密钥。
- 将其直接保存到服务器端密钥管理器或部署密钥中;不要将其放入浏览器代码、已提交的
.env文件或共享文档中。 - 先更新一个环境,并运行最小化的直接请求。
- 将更改逐步推广到其余环境,并确认预期位置的指纹已更改。
- 仅在验证替代密钥后再撤销旧密钥;除非旧密钥已泄露——在这种情况下,请立即撤销它并调查其使用情况。
这就是如何为恢复操作安全地获取 OpenAI API 密钥。这并不意味着应在团队成员或环境之间共享同一个密钥。请使用单独的项目/用户或服务帐户凭证,以便未来的 401 错误具有更小的影响范围。
网关特定的 401 需要从不同的问题入手
当代码库使用带有自定义 base_url 的 OpenAI 兼容 SDK 时,首先应问:哪个服务接收了该请求?网关可能在向上游 OpenAI 发送任何内容之前就返回自己的 401。在这种情况下,请根据该网关自身的文档验证网关凭证、租户/工作区、API 基础 URL 和模型标识符。
请求通过身份验证后,可使用 Flatkey API 快速入门进行针对性的兼容路由器设置,或返回OpenAI 兼容 API 故障排除指南,检查模型、流式传输和基础 URL。请将直接 OpenAI 密钥和网关密钥存储在名称不同的密钥变量中,以便未来发生事件时可从配置中直接识别,而无需反复试错。
关闭事件之前
- [ ] 主机名和
base_url与凭证颁发方相匹配。 - [ ] 生产进程加载了预期的密钥指纹。
- [ ] 密钥未被删除、撤销、泄露或过期。
- [ ] 项目成员资格和密钥权限对于该工作负载是正确的。
- [ ] 已排除
ip_not_authorized,或者已更新允许列表。 - [ ] 最小请求可从发生故障的运行时成功执行。
- [ ] 完整凭证未出现在日志、源代码管理、工单或聊天中。
- [ ] 仅在验证替代密钥后才撤销旧密钥,除非它已泄露。
如何获取 OpenAI API 密钥是一项有用的设置工作;诊断主机、密钥来源、生命周期和网络策略,才能将 401 修复转变为持久的生产环境修复方案。
常见问题
OpenAI 中“无效 API 密钥”是什么意思?
这意味着处理该请求的服务无法对提供的凭证进行身份验证。对于确切的 Incorrect API key provided 消息,请将目标密钥与错误中掩码显示的值进行比较,确认应用没有使用两个密钥,并检查正确的组织配置。其他错误类型(例如 ip_not_authorized)表示存在不同原因。
如果旧的 OpenAI API 密钥不再有效,如何获取新的密钥?
在目标 OpenAI 项目中创建新的密钥,将其保存到服务器端密钥存储中,更新活动部署,并在撤销旧密钥之前验证最小请求。创建页面关闭后,您无法再获取现有密钥的完整值。
我可以通过将新密钥放入浏览器 JavaScript 中来修复 OpenAI 401 吗?
不可以。浏览器或移动应用不是存放提供商密钥的正确位置。请通过后端路由请求,并将密钥存储在服务器端配置或密钥管理器中。
为什么有效的 OpenAI 密钥会返回 401 ip_not_authorized?
OpenAI IP 允许列表可能会拒绝来自不在组织允许列表中的地址的请求。请检查服务器或云工作负载的实际出口 IP,然后将其与已配置的 IP 范围进行比较。
为什么新的 OpenAI 密钥无法修复网关 401?
网关端点可能需要其自己的 API 密钥和配置。请确认请求主机名,并使用由该端点运营方颁发的凭证;直接 OpenAI 密钥无法对发送到每个 OpenAI 兼容 API 的请求进行身份验证。



