首页/网络/协议速查/WWW-Authenticate 认证挑战
HTTP 头与缓存70 条

WWW-Authenticate 认证挑战

401 响应携带的挑战头:告知客户端支持哪些认证方案及参数(realm/error/scope 等)。

协议速查网络更新于 2026-10-13

WWW-Authenticate 是什么

WWW-Authenticate 是 401 Unauthorized 响应必须携带的挑战头:服务器用它告诉客户端「这里需要认证,支持哪些方案,参数长什么样」。客户端据此决定是弹浏览器认证框、跳转登录页,还是用已有的令牌重试。调试 401 时,第一件事就是看这个头,因为它能区分「压根没带凭证」「凭证过期」「权限不足」等不同原因,而状态码本身只说了一个大概。

基本信息

名称WWW-Authenticate
作用发起认证挑战,声明方案与参数
规范RFC 9110 §11.6.1;Basic RFC 7617;Bearer RFC 6750;Digest RFC 7616
常见方案Basic、Bearer、Digest
多方案可并列多个挑战,客户端选自己能支持的
代理对应407 响应用 Proxy-Authenticate

典型使用场景

  • 实现 OAuth2/Bearer 接口:401 时返回带 error 描述的标准挑战
  • 排查客户端不弹认证框:检查挑战头的方案是否被客户端支持
  • 设计内网服务:Basic 挑战配合 TLS 提供最简单的账号密码保护
  • 多方案并存:同时给出 Bearer 与 Basic,让不同客户端各取所需
  • 网关统一鉴权:由网关返回 401 并被后端应用正确透传

常见挑战示例

常见挑战示例
# Bearer 挑战(令牌过期)
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token", error_description="token expired"

# Basic 挑战(浏览器会弹出认证框)
WWW-Authenticate: Basic realm="admin", charset="UTF-8"

# 携带凭证重试
curl -si -H 'Authorization: Bearer <token>' https://api.example.com/me | head -1

常见方案参数

方案关键参数说明
Basicrealm、charset账号密码经 Base64,必须跑在 TLS 上
Bearerrealm、error、error_description、scopeOAuth2 令牌,error 帮客户端区分失败原因
Digestrealm、nonce、qop、algorithm挑战应答式,较少见于新系统
多方案逗号分隔多个挑战客户端选支持且强度更高者
scope权限范围令牌权限不足时可提示需要哪些范围
客户端自动跳登录、弹认证框的行为都由这个头驱动。同一路径收到 401 但客户端毫无反应,常见原因是响应体里直接写了 JSON 错误页却漏了 WWW-Authenticate,或者被网关改写掉了。
Basic 方案的凭据只是 Base64 编码而非加密,明文传输等于把账号密码直接交给中间人。除非整条链路强制 TLS,否则不要在生产环境使用 Basic,且确需使用时应校验并限制 realm 与字符集。

易错点

  • 401 响应漏掉 WWW-Authenticate,部分客户端不会触发认证流程,只看到无法解释的失败
  • 在非 TLS 链路上使用 Basic 方案,账号密码以近乎明文形式传输
  • Bearer 挑战不写 error 参数,客户端无法区分「令牌过期」与「权限不足」,只能统一跳登录
  • 把 403 与 401 混用:401 表示需要认证并应带挑战头,403 表示身份已知但无权限,不应误导客户端反复认证
  • 网关与后端重复返回挑战头,产生多个相互冲突的 WWW-Authenticate 值

数据来源与参考

  • RFC 9110 §11.6.1 WWW-Authenticate
  • RFC 6750 §3(Bearer 挑战)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌