HTTP 401 错误表示客户端请求未通过身份验证,通常出现在使用 JWT(JSON Web Token)进行认证的场景中。当服务器返回 401 Unauthorized 时,意味着请求缺少有效的认证凭据,或者提供的凭据无效。
在使用 JWT 进行认证时,常见的 401 错误原因包括:
- 缺少认证头 :请求中未包含
Authorization头,或头中未包含有效的 Bearer 令牌。 - 无效的 JWT 令牌:令牌格式不正确、签名不匹配、或已过期。
- 令牌过期 :JWT 中的
exp(过期时间)字段已过期。 - 令牌不匹配 :JWT 的
aud(受众)或iss(签发者)字段与服务器期望的不一致。 - 密钥不匹配 :用于签名和验证令牌的密钥不一致。
- 令牌被篡改或伪造:JWT 的签名被篡改,导致验证失败。
为了调试 401 错误,可以采取以下步骤:
- 检查请求头 :确保
Authorization头的格式为Bearer <JWT>,并且令牌未被截断或损坏。 - 解码 JWT :使用工具(如 jwt.io)解码 JWT,查看其内容,确认
exp、aud、iss等字段是否正确。 - 检查服务器日志 :查看服务器是否返回了
WWW-Authenticate响应头,其中可能包含更详细的错误信息。 - 验证令牌签名:确保服务器使用与生成令牌时相同的密钥和算法进行验证。
在 ASP.NET Core 中,可以使用 JwtBearerEvents 来捕获和记录详细的错误信息,帮助排查问题。