接口返回401还是403?别搞混了
时间:2026-05-30 23:45:30 阅读:29
开发REST API时,认证失败到底该返回401还是403?很多人随便选一个,但这两个状态码的语义完全不同。
401 Unauthorized:你没登录
401的意思是"我不知道你是谁"。请求里没有提供认证信息,或者Token过期了、格式不对。客户端收到401后应该去登录、刷新Token或重新认证。注意名字虽然叫Unauthorized,但跟"授权"没关系,跟"认证"有关系——这是历史命名问题。
403 Forbidden:我知道你是谁,但你不配
403的意思是"我知道你是谁,但你没权限干这件事"。用户已经登录了,身份确认了,但他的角色或权限不够访问这个资源。比如普通用户访问管理员接口,登录状态有效但权限不足,这时候返回403。
常见错误用法
很多人把401和403混着用:用户没登录返回403(应该返回401),权限不足返回401(应该返回403)。还有更离谱的——认证失败一律返回200,然后在body里塞错误码,这是最糟糕的做法,前端解析起来极其痛苦。
正确的判断逻辑
请求里有Token吗?没有→401。有Token但过期了→401。Token有效但用户角色不够→403。简单记住:先问"你是谁"(401),再问"你能不能"(403)。




提供云计算服务