JWT令牌过期时应选择返回哪种HTTP状态码?
JWT令牌过期时的HTTP状态码选择
首选401 Unauthorized
你对403的理解完全正确——403确实适用于「凭证有效但无资源访问权限」的场景。而令牌过期本质属于身份验证失败:用户的凭证曾经有效,但当前已失效,需要重新提供或刷新有效凭证。HTTP规范中,401的核心语义就是「请求需要用户身份验证」,完全匹配令牌过期的场景。绝对不要自定义状态码
像425这类非标准状态码会给客户端适配带来额外成本,而且不符合HTTP语义的通用约定,很容易导致第三方工具或客户端解析出错,完全没必要。明确告知客户端令牌过期的方式
返回401的同时,通过响应体或响应头传递具体错误信息即可:- 响应体返回结构化JSON数据:
{ "error_code": "TOKEN_EXPIRED", "error_msg": "JWT令牌已过期,请重新登录或使用刷新令牌获取新凭证" } - 或者遵循OAuth2规范,通过
WWW-Authenticate响应头传递:return ResponseEntity.status(HttpStatus.UNAUTHORIZED) .header("WWW-Authenticate", "Bearer error=\"invalid_token\", error_description=\"JWT令牌已过期\"") .body("JWT令牌已过期,请重新获取有效凭证");
- 响应体返回结构化JSON数据:
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

