API Key是什么?为什么千万别随便发给别人
对,那就是 API Key。你理解成“门禁卡”特别准——它本身不是账号,而是证明“我有权代表某个账号访问某个房间”的凭证。打个比方:你住酒店,前台给了你一张房卡,这张卡能在特定时段刷开特定房门,但如果你把卡给别人,他就能随便进。API Key 也一样:它用来告诉 OpenAI、百度云这些服务,“我是付费账号 X,这条请求请放行,账单记我头上”。
很多人一开始会把它和登录密码搞混,其实区别很大:密码是你本人用来登录网页的,而 API Key 是给程序用的,一般很少改动。而且,如果把 API Key 直接写在代码里,就像把房卡贴在酒店大堂公告栏——任何看到的人都能拿去刷。
会,而且出过很多次真实事故。我就踩过坑——之前有个开发者把 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 等) | 低,平台加密存储 | 自动部署流程 |
用 .env 文件加加载库就自动化了。流程很简单:
- 在项目根目录新建一个 .env 文件,里面写:
OPENAI_API_KEY=sk-你的key(不要加引号或空格)。 - 在 .gitignore 里加上一行
.env,确保它不会被提交到 Git。 - 代码里用对应语言的库读取,比如 Python 的
python-dotenv:from dotenv import load_dotenv; load_dotenv(),然后用os.getenv('OPENAI_API_KEY')拿值。
这样你的 Key 永远只存在于本地和运行时的内存里,即使代码开源也不怕。另外,如果你用云 IDE 或在线环境,很多平台本身也提供“Secret”功能,直接把 Key 配在界面里,代码用变量名引用就好——目的都一样:让 Key 离开代码文本。
推荐每个程序各申请一把独立的 Key,这样出问题能精确定位到是哪个项目泄露,也方便单独撤销。大多数云平台都支持一个账号生成多组 API Key,你可以在控制台给每个 Key 贴个备注(比如“个人博客后台”、“测试脚本”),管理起来更清爽。另外可以试试 OpenAI 的 Usage Limits 或 Google Cloud 的 Quotas 给不同 Key 设独立预算。