Discover

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

Bearer Token

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

API Key 和 Bearer Token 是什么,有啥区别? 在调用 Web API 时,最常见的认证方式之一就是 API Key 和 Bearer Token。很多初学者会把它们当成一回事:反正都是“一个字符串,放到请求里”。但实际上,它们的用途、设计目标、安全性和适用场景都有明显区别。 这篇文章会用通俗方式讲清楚: API Key 是什么 Bearer Token 是什么 两者的核心区别

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

Bearer Token

Bearer 到底是啥意思?

Bearer 这个词本意是“持有者、携带者”。
Bearer Token 里,它的核心意思是:

谁持有这个 token,谁就被当作有权限访问。

也就是说,服务端通常不关心你“是不是原始拥有者”,而是关心:

  • 你有没有把这个 token 带来
  • 这个 token 是否有效
  • 它有没有过期
  • 它是否有访问当前资源的权限

所以 Bearer Token 经常被翻译成:

  • 持有者令牌
  • 持票即有效的令牌

这也是为什么你看到请求头里常写:

http
Authorization: Bearer <token>

意思就是:
“我现在用的是一种 Bearer 类型 的授权凭证,这个凭证就是后面的 token。”


为啥叫 Bearer?它强调了什么?

它强调的是一种认证/授权模型,不是 token 长什么样。

很多人误以为 Bearer Token = JWT,其实不是

  • Bearer:表示“使用方式”
  • Token:表示“令牌”
  • JWT:只是 token 的一种格式

也就是说,下面两种都可能是 Bearer Token:

text
Authorization: Bearer abcdef123456Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

前者可能是数据库里查得到的随机串,后者可能是 JWT。

它强调的关键点

Bearer 机制强调:

  • 凭证在手即可用
  • 不一定需要额外证明“你就是你”
  • 因此保密性特别重要

你可以把它想成现实中的几种东西:

  • 门禁卡:谁拿着卡,谁就能刷门
  • 电影票:谁拿着票,谁就能进场
  • 酒店房卡:前台默认“拿着房卡的人”有权限开这个房间

这些东西都符合 Bearer 思想:
系统认“票/卡”,不一定认“人”。


为啥要用 Bearer,而不是直接用户名密码?

因为 Bearer Token 有几个非常重要的好处。

1. 不用每次都传用户名密码

如果每个请求都带用户名密码,风险很大:

  • 密码暴露一次,影响长期账户安全
  • 服务端要频繁处理敏感凭证
  • 客户端也更难安全保存密码

而 Bearer Token 的方式是:

  1. 用户先登录一次
  2. 服务端验证用户名密码
  3. 发一个临时 token
  4. 后续请求只带 token

这样做的好处是:

  • 密码不用到处传
  • token 可以设置短期有效
  • token 泄露后的损害通常比密码泄露更可控

2. 它天然适合“授权”而不只是“认证”

Bearer Token 不只是表示“我是谁”,更常表示:

  • 我已经登录过
  • 我被授予了某些权限
  • 我可以访问哪些 API

比如一个 token 可以只允许:

  • 读取用户资料
  • 不能删除账户
  • 只能访问某个应用范围的数据

这就是常说的 scope(作用范围)


3. 可以设置过期时间,风险更可控

API Key 往往比较长期;
Bearer Token 通常是短期的 access token

例如:

  • 1 小时后过期
  • 15 分钟后过期
  • 过期后要用 refresh token 刷新

这样即使 token 泄露,攻击者可利用的窗口也更短。


Bearer 的安全特点:优点和风险同时存在

Bearer 好用,但它有一个非常鲜明的安全特征:

它不证明“持有者是谁”,只证明“持有者手里有票”。

所以它的优点和风险其实来自同一个设计。

优点

  • 简单,HTTP Header 就能传
  • 很适合前后端分离、移动端、OAuth 2.0
  • 可以做短期授权
  • 可以细粒度控制权限

风险

  • 一旦泄露,别人拿去就能用
  • 不像“签名请求”那样能证明请求一定来自原客户端
  • 必须依赖 HTTPS 和安全存储

一个最直观的例子

登录阶段

http
POST /login HTTP/1.1Host: api.example.comContent-Type: application/json
{"username":"alice","password":"123456"}

服务端验证成功后返回:

json
{  "access_token": "abc123token",  "token_type": "Bearer",  "expires_in": 3600}

访问资源阶段

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

服务端看到这个 token,就会判断:

  • token 是否存在
  • 是否没过期
  • 是否有 profile:read 权限

如果都通过,就返回用户资料。


它和 API Key 的本质区别

你可以这样抓核心:

  • API Key 更像“应用身份证”
  • Bearer Token 更像“登录后的临时通行证”

API Key 常用于:

  • 识别哪个应用在调用
  • 统计配额
  • 简单鉴权

Bearer Token 常用于:

  • 表示某个用户已经登录
  • 表示用户/客户端已被授权
  • 控制访问范围和有效期

你还可以继续往下学的子概念

如果你想彻底吃透 Bearer Token,建议继续看这些相关概念:

  • Access Token:真正拿来访问 API 的令牌
  • Refresh Token:用来换新的 access token
  • OAuth 2.0:Bearer Token 最常见的标准体系
  • JWT:一种常见 token 格式
  • Scope:令牌可访问的权限范围
  • Token Revocation:令牌撤销
  • Proof-of-Possession Token:比 Bearer 更强,要求证明“你不仅拿着 token,还真是合法持有者”

一句话总结

Bearer 的意思就是“持有者”。之所以要用 Bearer,是因为它提供了一种简单、标准、适合登录授权场景的访问凭证机制:谁带着有效 token 来,谁就能以该 token 代表的身份和权限访问资源。

如果你愿意,我下一步可以继续给你讲:

  1. Bearer Token 和 JWT 到底啥关系
  2. 为什么说 Bearer “泄露即失守”
  3. API Key / Session / Bearer Token 三者怎么区分