HTTP 401 Unauthorized

需要身份验证:服务器不知道你是谁,或者你的凭据已失效。

HTTP 401 是什么意思

HTTP 401 Unauthorized 表示该请求因缺少有效的身份验证凭据而被拒绝。尽管名称如此,它关乎的是身份验证(你是谁),而不是授权(你可以做什么)——后者对应的是 403 Forbidden。

一个符合规范的 401 会包含 WWW-Authenticate 头,说明应如何进行身份验证,例如令牌类 API 使用 Bearer,经典 HTTP 身份验证使用 Basic。

401 错误的常见原因

  • 根本没有发送任何凭据(缺少 Authorization 头或会话 cookie)。
  • 令牌已过期、被撤销或格式错误——这是最常见的 API 原因。
  • 身份验证方案错误(在期望 Bearer 令牌的地方发送了 API 密钥)。
  • 已登出的会话:标签页保持打开期间,cookie 已过期或被清除。
  • 时钟偏差使短期有效的 JWT 在到达时就已显得过期。

作为用户该如何修复

  • 重新登录——会话很可能已经过期。
  • 如果陷入循环,请清除该站点的 cookie 并重新登录。
  • 检查该 URL 是否属于需要你没有的账户权限的管理或预发布区域。

作为开发者该如何修复

  • 刷新或重新签发过期的令牌;在 API 客户端中实现自动令牌刷新。
  • 按照期望的确切格式发送 Authorization 头(“Bearer <token>”——单词和空格都很重要)。
  • 仅在缺少/无效凭据时返回 401,对权限不足的合法用户返回 403,以便客户端能够正确应对。
  • 当 JWT 的“exp”校验出现意外失败时,请检查服务器的时间同步(NTP)。

示例响应

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token", error_description="expired"

常见问题

401 和 403 有什么区别?

401 表示服务器没有你的有效凭据——请登录或刷新令牌。403 表示服务器已经知道你是谁,但仍然拒绝。

为什么我用有效令牌仍然收到 401?

常见原因:令牌过期、请求头格式错误、令牌是为其他环境或受众签发的,或服务器时钟偏差。

登录失败应该返回 401 吗?

对 API 来说是的,并会附带说明性的响应体。Web 登录表单通常改为在页面上返回带错误信息的 200。