API Key 和 Bearer Token 是什么,有啥区别?
API Key 和 Bearer Token 是什么,有啥区别?
在调用 Web API 时,最常见的认证方式之一就是 API Key 和 Bearer Token。很多初学者会把它们当成一回事:反正都是“一个字符串,放到请求里”。但实际上,它们的用途、设计目标、安全性和适用场景都有明显区别。
这篇文章会用通俗方式讲清楚:
- API Key 是什么
- Bearer Token 是什么
- 两者的核心区别
- 各自适合哪些场景
- 实际请求示例
- 使用时的安全建议
一句话理解
可以先用一个生活类比:
- API Key:像“系统发给你的固定开发者编号”
- Bearer Token:像“你登录后拿到的一张临时通行证”
更准确地说:
什么是 API Key?
API Key 是服务端分配给客户端的一串唯一字符串,用来识别“谁在调用 API”。
它最常见的作用包括:
- 标识调用者身份
- 进行配额控制和限流
- 统计调用量
- 提供基础级别的访问控制
API Key 的工作方式
当你注册某个平台的开发者账号后,平台会给你一个 Key,比如:
调用 API 时,你把它带上:
服务端收到后会检查:
- 这个 Key 是否存在
- 是否有效
- 是否被禁用
- 是否超过调用频率或配额
如果都没问题,就允许访问。
API Key 的优点
- 简单易用
- 接入成本低
- 适合服务对服务调用
- 便于统计每个开发者或应用的使用情况
API Key 的缺点
- 往往权限比较粗粒度
- 泄露后容易被直接盗用
- 通常不能很好表达“某个具体用户已经授权”
- 如果长期不变,风险较高
什么是 Bearer Token?
Bearer Token 是一种“持有即有效”的访问令牌。
“Bearer” 的意思可以理解为:谁拿着它,谁就能用它。
它通常出现在 OAuth 2.0、OpenID Connect、登录授权系统中。最常见的形式是:
Bearer Token 的核心含义
Bearer Token 的重点不只是“识别调用方”,更重要的是:
- 表示某个用户或客户端已经完成认证
- 表示其已获得某些资源访问权限
- 可以包含过期时间、作用范围等信息
常见场景
比如用户登录一个 App:
- 用户输入用户名和密码
- 服务端验证成功
- 服务端返回一个 access token
- 客户端之后每次请求都带上 Bearer Token
- 服务端据此判断该用户能访问哪些资源
请求示例
Bearer Token 的优点
- 更适合用户登录和授权场景
- 通常支持过期时间
- 可以限制访问范围(scope)
- 能和 OAuth 2.0 等标准体系配合
- 安全性和扩展性通常更好
Bearer Token 的缺点
- 实现比 API Key 更复杂
- 需要处理过期、刷新、撤销等机制
- 若保管不当,泄露后仍可能被冒用
API Key 和 Bearer Token 的核心区别
很多文章只说“一个简单,一个高级”,但更本质的区别在于:它们表达的信息不一样。
1. 标识 vs 授权
- API Key 更偏向“你是谁的应用”
- Bearer Token 更偏向“你现在被授权做什么”
也就是说:
- API Key 常用于识别某个开发者、某个项目、某个客户端
- Bearer Token 常用于表示某个登录用户或某个被授权会话
2. 长期凭证 vs 临时凭证
- API Key 往往是长期有效的
- Bearer Token 往往有较短有效期,比如 1 小时、2 小时
这意味着 Bearer Token 即使泄露,风险窗口通常也更短。
3. 权限粒度不同
API Key 常见情况是:
- 有这个 Key 就能访问某类 API
- 权限比较固定
Bearer Token 通常可以更细:
- 只能读数据
- 不能删数据
- 只能访问当前用户资源
- 只在一定时间内有效
4. 使用背景不同
一个直观流程图
下面用 Mermaid 图看两者的典型流程差异:
代码示例
使用 API Key 调用
使用 Bearer Token 调用
Python 示例
Bearer Token 一定是 JWT 吗?
不一定。
很多人看到 Bearer Token 就想到 JWT,但这是两个不同概念:
- Bearer Token:是一种使用方式,表示令牌放在
Authorization: Bearer ...中 - JWT:是一种令牌格式
也就是说:
- Bearer Token 可以是 JWT
- Bearer Token 也可以是普通随机字符串
- JWT 也常被用作 Bearer Token
简单关系如下:
安全注意事项
无论是 API Key 还是 Bearer Token,本质上都是敏感凭证。谁拿到,谁就可能调用你的接口。
通用安全建议
- 只走 HTTPS
- 不要把密钥写死在前端代码里
- 不要提交到 Git 仓库
- 使用环境变量存储
- 定期轮换密钥
- 配置最小权限原则
- 监控异常调用
API Key 的特别建议
- 尽量绑定来源,如 IP、域名、应用
- 设置配额和限流
- 给不同环境分配不同 Key(开发、测试、生产)
Bearer Token 的特别建议
- 设置较短过期时间
- 使用 Refresh Token 刷新 Access Token
- 支持撤销机制
- 对高风险操作增加二次验证
该怎么选?
这取决于你的系统目标。
适合用 API Key 的情况
- 你要开放一个简单开发者 API
- 主要是“应用调用应用”
- 只需要基础识别、计费、限流
- 不涉及复杂用户授权
适合用 Bearer Token 的情况
- 你有用户登录系统
- 需要基于用户身份访问资源
- 需要细粒度权限控制
- 你打算使用 OAuth 2.0 / OIDC
很多系统会同时使用
现实中,很多平台会把两者结合起来:
- API Key 用于识别应用
- Bearer Token 用于识别用户授权
例如:
- 某个第三方应用先用自己的 client credentials 证明“我是哪个应用”
- 用户登录后再拿到 Bearer Token 访问自己的数据
一个简单对比总结
再进一步:
结语
API Key 和 Bearer Token 虽然都能放在请求里当“凭证”,但它们并不是同一个层面的东西:
- API Key 侧重于识别客户端或应用
- Bearer Token 侧重于认证后的授权访问
如果你在做一个简单的开放接口,API Key 往往已经够用;
如果你要处理用户登录、权限控制和第三方授权,Bearer Token 通常更合适。
最后记住这三点
- API Key 更简单,但通常更粗粒度
- Bearer Token 更适合用户授权和现代身份系统
- 两者都需要妥善保管,否则“拿到的人就能用”
如果你愿意,我还可以继续帮你写一篇进阶版:
《JWT、Access Token、Refresh Token、API Key 之间到底是什么关系?》