为了账号安全,请及时绑定邮箱和手机立即绑定

403禁止对401次未经授权的HTTP响应

403禁止对401次未经授权的HTTP响应

手掌心 2019-06-16 15:15:41
403禁止对401次未经授权的HTTP响应对于存在但用户没有足够权限的网页(它们不登录或不属于适当的用户组),正确的HTTP响应是什么?401?403?还有别的事吗?到目前为止,我所读到的每一篇文章都不太清楚两者之间的区别。哪些用例适合于每个响应?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

有个问题401未经授权,用于身份验证错误的HTTP状态代码。仅此而已:这是为了认证,而不是授权。接收401响应的服务器告诉您:“您没有身份验证-或者根本没有身份验证,或者身份验证不正确-但是请重新验证,然后再试一次。”为了帮助你,它总是包括一个www-认证描述如何进行身份验证的标头。

这是一个通常由您的Web服务器,而不是您的Web应用程序返回的响应。

这也是一件非常临时的事情;服务器要求您再试一次。

因此,为了获得授权,我使用403禁止回应。它是永久性的,它与我的应用程序逻辑联系在一起,它是一个比401更具体的响应。

收到403的回复是服务器告诉你,“对不起。我知道你是谁-我相信你说你是谁-但你只是没有权限访问这个资源。也许如果你很好地问了系统管理员,你就会得到许可。但请不要再打扰我,直到你的困境改变。“

总之,a401未经授权响应用于缺少或错误的身份验证,以及403禁止在对用户进行身份验证但未被授权对给定资源执行所请求的操作时,应在事后使用响应。

另一个很好的图片格式如何使用http状态代码。


查看完整回答
反对 回复 2019-06-16
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

看见RFC 2616:

401未经授权:

如果请求已经包含授权凭据,则401响应指示拒绝对这些凭据进行授权。

403禁止:

服务器理解请求,但拒绝满足请求。

更新

从您的用例来看,用户似乎没有经过身份验证。我会退回401美元。


编辑:RFC 2616是过时的,请参阅RFC 7231RFC 7235.


查看完整回答
反对 回复 2019-06-16
?
慕少森

TA贡献2019条经验 获得超9个赞

其他的答案是,必须理解RFC 2616上下文中的身份验证和授权只引用RFC 2617的HTTP身份验证协议。HTTP状态代码不支持RFC 2617以外的方案进行身份验证,在决定使用401或403时也不考虑。

简练

未经授权表示客户端未通过RFC 2617身份验证,而服务器正在启动身份验证进程。禁忌表示客户端已通过RFC 2617身份验证且没有授权,或者服务器不支持所请求的资源的RFC 2617。

这意味着,如果您有自己的滚动登录进程,并且从不使用HTTP身份验证,则403始终是正确的响应,而401不应该使用。

详细而深入

从RFC 2616

10.4.2 401未经授权

请求需要用户身份验证。响应必须包括一个WWW认证头字段(第14.47节),该字段包含适用于请求资源的问题。客户端可以使用适当的授权头字段重复请求(第14.8节)。

10.4.4 403禁止服务器理解请求,但拒绝履行请求。授权于事无补,不应重复请求。

首先要记住的是,本文档上下文中的“身份验证”和“授权”特别提到了来自RFC 2617的HTTP身份验证协议。它们不引用任何您自己创建的使用登录页创建的身份验证协议。我将使用“登录”来指通过rfc 2617以外的其他方法进行的身份验证和授权。

因此,真正的区别不是问题是什么,甚至不是有解决办法。不同之处在于服务器希望客户机下一步做什么。

401表示无法提供资源,但服务器请求客户端通过HTTP身份验证登录,并已发送回复头以启动进程。可能有允许访问资源的授权,可能没有,但让我们尝试一下,看看会发生什么。

403表示无法提供资源,对于当前用户,没有办法通过RFC 2617解决这一问题,也没有尝试的意义。这可能是因为已知没有任何级别的身份验证是足够的(例如,因为IP黑名单),但可能是因为用户已经通过身份验证,并且没有权限。RFC 2617模型是一个用户,一个凭据,因此用户可能拥有第二组可被授权的凭据的情况可能会被忽略。它既不建议也不暗示某种类型的登录页面或其他非RFC 2617身份验证协议可能有帮助,也可能没有帮助-这超出了RFC 2616标准和定义。


编辑:RFC 2616是过时的,请参阅RFC 7231RFC 7235.


查看完整回答
反对 回复 2019-06-16
  • 3 回答
  • 0 关注
  • 631 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信