正在加载,请稍候…

HTTP Authorization 标头详解:Basic、Bearer、Digest 和 API 密钥

了解 HTTP Authorization 标头的格式、Basic/Bearer/Digest 方案、服务器如何通过 WWW-Authenticate 发起挑战

HTTP Authorization 标头详解:Basic、Bearer、Digest 和 API 密钥

什么是 Authorization 标头

Authorization 请求标头携带客户端用于向服务器证明身份的凭据。其语法看似简单——一个方案名称、一个空格,以及格式取决于方案的凭据

Authorization: <scheme> <credentials>

其他所有内容——Basic、Bearer、Digest、API 密钥——只是 <scheme> 的不同值和 <credentials> 的不同编码。

HTTP Authorization 标头详解:Basic、Bearer、Digest 和 API 密钥 插图

挑战-响应流程

身份验证通常由服务器发起,而非客户端。当你请求受保护资源但未提供凭据时,服务器会返回 401 Unauthorized 和一个 WWW-Authenticate 标头,指明它期望的方案:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Admin Area"

然后客户端使用匹配的 Authorization 标头重试。如果你不确定失败的请求是否是身份验证问题,那么 401 加上 WWW-Authenticate 这一对就是线索——参见 401 vs 403: Unauthorized vs Forbidden 了解区别。

常见方案

HTTP Authorization 标头详解:Basic、Bearer、Digest 和 API 密钥 插图

Basic

凭据是 base64(username:password)。简单、可重复使用、每次请求都发送,并且仅在 HTTPS 下安全,因为 Base64 是可逆的。详细信息请参阅 HTTP Basic Authentication: How It Works

Authorization: Basic YWRtaW46c2VjcmV0MTIz

Bearer

凭据是一个不透明或签名的令牌(通常是 JWT 或 OAuth 访问令牌)。令牌可以过期并携带作用域,这使得 Bearer 成为面向用户的应用程序和 API 的现代默认选择。在 Basic Auth vs Bearer Token 中比较它们。

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

如果你的令牌是 JWT,你可以使用 JWT Parser 检查其标头和载荷。

HTTP Authorization 标头详解:Basic、Bearer、Digest 和 API 密钥 插图

Digest

一种挑战-响应方案,使用服务器提供的 nonce 对密码进行哈希处理,因此原始密码永远不会在网络上传输。在纯 HTTP 上比 Basic 更安全,但如今已被 TLS + Bearer 令牌所取代。

API 密钥

不是注册的 HTTP 方案,但通常以 Authorization: Bearer <key>、自定义标头如 X-API-Key 或查询参数的形式携带。适用于服务间调用;请像对待密码一样对待密钥。

应该使用哪种方案?

需求 方案
内部 API 或快速保护,通过 HTTPS Basic
用户登录、过期/作用域访问 Bearer (JWT/OAuth)
必须避免发送密码的遗留系统 Digest
机器对机器服务调用 API 密钥(作为 Bearer)

常见问题

Authorization 标头的格式是什么? Authorization: <scheme> <credentials>。对于 Basic 是 Basic base64(user:pass);对于 Bearer 是 Bearer <token>

Authorization: Basic 和 Bearer 有什么区别? Basic 发送可重复使用的 username:password 凭据,以 Base64 编码。Bearer 发送一个可以过期并携带作用域的令牌。Basic 适用于内部工具;Bearer 适用于面向用户的应用程序。

什么是 WWW-Authenticate 标头? 它是服务器的挑战,随 401 响应返回,告诉客户端在重试时应使用哪种身份验证方案(和 realm)。

使用 Basic Auth generator 生成和解码 Authorization: Basic 标头,并通过 HTTP status codes reference 查找 401 等响应码。