API Key是什么?为什么千万别随便发给别人

2026-05-25 · 阅读 35 · 1865 字 · ⏱️ 预计6 分钟读完

老D,我最近在折腾 OpenAI 的接口,注册之后给了我一个 sk-****** 的字符串,这就是 API Key 吧?我之前一直以为它就是个纯密码,但有人跟我说它更像门禁卡,什么意思?

对,那就是 API Key。你理解成“门禁卡”特别准——它本身不是账号,而是证明“我有权代表某个账号访问某个房间”的凭证。打个比方:你住酒店,前台给了你一张房卡,这张卡能在特定时段刷开特定房门,但如果你把卡给别人,他就能随便进。API Key 也一样:它用来告诉 OpenAI、百度云这些服务,“我是付费账号 X,这条请求请放行,账单记我头上”。

很多人一开始会把它和登录密码搞混,其实区别很大:密码是你本人用来登录网页的,而 API Key 是给程序用的,一般很少改动。而且,如果把 API Key 直接写在代码里,就像把房卡贴在酒店大堂公告栏——任何看到的人都能拿去刷。

等等,那我是不是一拿到 Key 就得赶紧藏起来?我之前还真把 Key 直接写在 Python 脚本里,然后发到了 GitHub……会出大事吗?

会,而且出过很多次真实事故。我就踩过坑——之前有个开发者把 Wolfram 的 API Key 公开在 GitHub 上,结果被挖矿脚本盯上,一晚上跑掉几千美元。OpenAI 的 Key 被滥用的案例也不少,比如有人偷去自动生成垃圾内容,或者用来调高价模型,账单直接爆掉。

为什么危险?因为 API Key 不像银行卡还能设交易密码,它拿赤裸裸的权限,谁有这个字符串谁就能调用你的额度。而且很多服务是按调用量计费,没有默认的上限,除非你主动去控制台给 Key 加配额或警报。所以,如果已经泄露,第一步先去平台立刻撤销(Revoke)这个 Key,重新生成一个新的。

那如果我还没来得及设警报,已经被盗刷了怎么办?除了撤销,还能做啥?

先止血,再加固。顺序是这样的:

  • 马上到控制台停用或删除泄露的 Key,看用量日志估算损失。
  • 联系客服说明情况,有些服务(比如 Vercel、AWS)可能会酌情免单,但 OpenAI 目前一般不补偿,所以重在预防。
  • 给新 Key 加上每月预算上限(Hard Limit)和用量警报,超过就自动拦截并邮件通知。

之后就要考虑保管策略了。说白了,就是让 Key 只在运行时“存在”,绝不出现在源代码里。我把常见的做法列了个表:

方式风险适合场景
硬编码在代码里极高,git push 即泄露❌ 绝对不推荐
环境变量(如本地.env 文件)低,只要.env 不入仓库个人开发、小团队
云密钥管理服务(AWS Secrets Manager/Vault)极低,有访问控制和轮转企业生产环境
CI/CD 变量加密(GitHub Actions Secrets 等)低,平台加密存储自动部署流程
那环境变量怎么用?我是不是每次跑代码前都要手动 export 一遍?好麻烦啊。

.env 文件加加载库就自动化了。流程很简单:

  1. 在项目根目录新建一个 .env 文件,里面写:OPENAI_API_KEY=sk-你的key(不要加引号或空格)。
  2. .gitignore 里加上一行 .env,确保它不会被提交到 Git。
  3. 代码里用对应语言的库读取,比如 Python 的 python-dotenv
    from dotenv import load_dotenv; load_dotenv(),然后用 os.getenv('OPENAI_API_KEY') 拿值。

这样你的 Key 永远只存在于本地和运行时的内存里,即使代码开源也不怕。另外,如果你用云 IDE 或在线环境,很多平台本身也提供“Secret”功能,直接把 Key 配在界面里,代码用变量名引用就好——目的都一样:让 Key 离开代码文本

🔑 一句话记住:程序用 Key 就像用门禁卡,放进代码就好比把卡号写在所有人能看到的门上;安全保管的底线是“入环境变量,不入代码”,并给每个 Key 上额度锁。 那我再问一句,如果我一个账号有多个程序都要用,是共用一把 Key 还是每个程序各申请一把?

推荐每个程序各申请一把独立的 Key,这样出问题能精确定位到是哪个项目泄露,也方便单独撤销。大多数云平台都支持一个账号生成多组 API Key,你可以在控制台给每个 Key 贴个备注(比如“个人博客后台”、“测试脚本”),管理起来更清爽。另外可以试试 OpenAI 的 Usage LimitsGoogle Cloud 的 Quotas 给不同 Key 设独立预算。