缺少身份验证的HTTP状态代码

dea*_*mon 20 rest http http-status-codes

HTTP定义状态401 Unauthorized以丢失身份验证,但此状态仅适用于HTTP身份验证.当未经授权的请求发生时,我应该使用基于会话cookie的系统返回什么状态?

Mar*_*wis 25

在形式上,403 Forbidden是正确的回应.它被定义为

授权无效,请求不应重复.

令人困惑的部分可能是"授权无济于事",但它们的确意味着"HTTP身份验证"(WWW-Authenticate)

  • @Erik Philips - 这是正确的,请求不应该.一旦请求的标头被更改为具有正确的会话cookie(因此不是SAME请求),将授予访问权限. (6认同)
  • 这意味着用户不应该再次尝试请求.这不合适. (3认同)
  • 从技术上讲,我相信你是对的.在实际实现的情况下,我相信200具有基于HTML的错误消息或302重定向到可以发生基于会话的登录的另一页面更常见(并且可能更有用). (2认同)
  • 我不知道强烈引用授权方法是否具有误导性.如果授权通过cookie或头字段传输无关紧要,状态代码的关键信息是如果失败的原因是由于未经授权的请求(令牌过期/未指定 - 401)或者用户是未被批准访问此资源,并且无法使用其"帐户"进行更改(403). (2认同)

use*_*erx 5

403我认为技术上是正确的(如果您正在实施自定义API /协议,则可能最有效).

401是不合适的,因为它引用具有WWW-Authenticate标头的授权,而会话cookie不是.

如果这是一个面向公众的网站,您试图根据会话cookie拒绝访问,200具有适当的主体以指示需要登录或302临时重定向到登录页面通常是最佳的.