对于存在但用户没有足够权限(他们未登录或不属于正确的用户组)的网页,要提供的正确HTTP响应是什么?
401未授权?403禁止?还有别的吗?
到目前为止,我读到的每一篇文章都不太清楚两者之间的区别。每个响应都适合哪些用例?
对于存在但用户没有足够权限(他们未登录或不属于正确的用户组)的网页,要提供的正确HTTP响应是什么?
401未授权?403禁止?还有别的吗?
到目前为止,我读到的每一篇文章都不太清楚两者之间的区别。每个响应都适合哪些用例?
当前回答
你又是谁??(程序员走进一个没有ID或ID无效的酒吧)
403:太好了,又是你。我盯着你了。走吧,离开这里。(程序员走进一家86岁的酒吧)
其他回答
401未经授权:我不知道你是谁。这是一个身份验证错误。403禁止:我知道你是谁,但你没有访问此资源的权限。这是一个授权错误。
401响应是指以下之一:
缺少访问令牌。访问令牌已过期、吊销、格式错误或无效。
403响应另一方面意味着访问令牌确实有效,但用户没有执行所请求的操作的适当权限。
编辑:RFC2616已过时,请参阅RFC9110。
401未授权:
如果请求已经包括授权凭证,则401响应指示已拒绝对这些凭证的授权。
403禁止:
服务器理解该请求,但拒绝履行该请求。
从您的用例来看,用户似乎没有经过身份验证。我会返回401。
其含义如下:
401:用户未(正确)验证,资源/页面需要验证
403:用户的角色或权限不允许访问请求的资源,例如,用户不是管理员,请求的页面是管理员的。
注意:从技术上讲,403是401的超集,因为给未经认证的用户403也是合法的。无论如何,区分更有意义。
我对它的看法与公认的答案略有不同。
当认证失败时返回403,当授权失败时返回401,这似乎更符合语义和逻辑。
我的理由如下:
当您请求认证时,您有权提出该请求。你需要这样做,否则一开始就没有人能够通过认证。
如果您的身份验证失败,您将被禁止,这是有意义的。
另一方面,被禁止者也可以申请授权,但假设您已通过身份验证,但无权访问特定端点。返回401 Unauthorized似乎更有意义。
对于失败的身份验证尝试,Spring Boot的安全性返回403