Discover

API Key 和 Bearer Token 是什么,有啥区别?

API Key 和 Bearer Token 是什么,有啥区别?

API Key 和 Bearer Token 是什么,有啥区别?

API Key 和 Bearer Token 是什么,有啥区别?

在调用 Web API 时,最常见的认证方式之一就是 API KeyBearer Token。很多初学者会把它们当成一回事:反正都是“一个字符串,放到请求里”。但实际上,它们的用途、设计目标、安全性和适用场景都有明显区别。

这篇文章会用通俗方式讲清楚:

  • API Key 是什么
  • Bearer Token 是什么
  • 两者的核心区别
  • 各自适合哪些场景
  • 实际请求示例
  • 使用时的安全建议

一句话理解

可以先用一个生活类比:

  • API Key:像“系统发给你的固定开发者编号”
  • Bearer Token:像“你登录后拿到的一张临时通行证”

更准确地说:

概念API KeyBearer Token
本质标识调用方的凭证表示授权状态的访问令牌
常见用途识别应用、统计调用、简单鉴权用户登录后的授权访问
生命周期通常较长通常较短
是否常代表用户身份不一定通常是
常见位置Header、Query、Body通常在 Authorization Header
安全能力较基础通常更强,可结合 OAuth 2.0

什么是 API Key?

API Key 是服务端分配给客户端的一串唯一字符串,用来识别“谁在调用 API”。

它最常见的作用包括:

  • 标识调用者身份
  • 进行配额控制和限流
  • 统计调用量
  • 提供基础级别的访问控制

API Key 的工作方式

当你注册某个平台的开发者账号后,平台会给你一个 Key,比如:

text
abc123xyz890

调用 API 时,你把它带上:

http
GET /v1/weather?city=Beijing HTTP/1.1Host: api.example.comX-API-Key: abc123xyz890

服务端收到后会检查:

  • 这个 Key 是否存在
  • 是否有效
  • 是否被禁用
  • 是否超过调用频率或配额

如果都没问题,就允许访问。

API Key 的优点

  • 简单易用
  • 接入成本低
  • 适合服务对服务调用
  • 便于统计每个开发者或应用的使用情况

API Key 的缺点

  • 往往权限比较粗粒度
  • 泄露后容易被直接盗用
  • 通常不能很好表达“某个具体用户已经授权”
  • 如果长期不变,风险较高

什么是 Bearer Token?

Bearer Token 是一种“持有即有效”的访问令牌。
“Bearer” 的意思可以理解为:谁拿着它,谁就能用它

它通常出现在 OAuth 2.0、OpenID Connect、登录授权系统中。最常见的形式是:

http
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Bearer Token 的核心含义

Bearer Token 的重点不只是“识别调用方”,更重要的是:

  • 表示某个用户或客户端已经完成认证
  • 表示其已获得某些资源访问权限
  • 可以包含过期时间、作用范围等信息

常见场景

比如用户登录一个 App:

  1. 用户输入用户名和密码
  2. 服务端验证成功
  3. 服务端返回一个 access token
  4. 客户端之后每次请求都带上 Bearer Token
  5. 服务端据此判断该用户能访问哪些资源

请求示例

http
GET /api/profile HTTP/1.1Host: api.example.comAuthorization: Bearer access_token_123456

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. 使用背景不同

场景更常用 API Key更常用 Bearer Token
天气接口、地图接口、AI 接口调用有时也支持
前后端用户登录
OAuth 第三方授权登录
服务间简单识别也可以
面向最终用户的数据访问不太适合很适合

一个直观流程图

下面用 Mermaid 图看两者的典型流程差异:


代码示例

使用 API Key 调用

bash
curl -X GET "https://api.example.com/v1/data" \  -H "X-API-Key: abc123xyz890"

使用 Bearer Token 调用

bash
curl -X GET "https://api.example.com/v1/profile" \  -H "Authorization: Bearer access_token_123456"

Python 示例

python
import requests
# API Keyresp1 = requests.get(    "https://api.example.com/v1/data",    headers={"X-API-Key": "abc123xyz890"})
# Bearer Tokenresp2 = requests.get(    "https://api.example.com/v1/profile",    headers={"Authorization": "Bearer access_token_123456"})
print(resp1.status_code, resp2.status_code)

Bearer Token 一定是 JWT 吗?

不一定。

很多人看到 Bearer Token 就想到 JWT,但这是两个不同概念:

  • Bearer Token:是一种使用方式,表示令牌放在 Authorization: Bearer ...
  • JWT:是一种令牌格式

也就是说:

  • Bearer Token 可以是 JWT
  • Bearer Token 也可以是普通随机字符串
  • JWT 也常被用作 Bearer Token

简单关系如下:

概念含义
Bearer Token令牌的使用方式
JWT令牌的数据格式

安全注意事项

无论是 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 访问自己的数据

一个简单对比总结

text
API Key      = 证明“我是哪个应用/调用方”Bearer Token = 证明“我当前被允许访问什么”

再进一步:

text
API Key 更像门牌号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 之间到底是什么关系?》