【问题标题】:HTTP status code for missing authentication缺少身份验证的 HTTP 状态代码
【发布时间】:2010-11-29 08:11:31
【问题描述】:

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

【问题讨论】:

    标签: http rest http-status-codes


    【解决方案1】:

    正式地,403 Forbidden 是正确的响应。它被定义为

    授权无济于事,不应重复请求。

    令人困惑的部分可能是“授权无济于事”,但它们真正的意思是“HTTP 身份验证”(WWW-Authenticate)

    【讨论】:

    • 这意味着用户不应该再次尝试请求。这是不合适的。
    • 技术上,我相信你是对的。在实际实现的情况下,我相信带有基于 HTML 的错误消息的 200 或 302 重定向到可以发生基于会话的登录的另一个页面更常见(也许可以说更有用)。
    • @Erik Philips - 这是正确的,请求不应该。一旦请求的标头被更改为具有正确的会话 cookie(因此不是 SAME 请求),将授予访问权限。
    • 不知道强引用授权METHOD是否误导。 IMO 授权是否通过 cookie 或标头字段传输无关紧要,状态代码的关键信息是失败的原因是由于未经授权的请求(令牌过期/未指定 - 401)还是用户是未获准访问此资源,并且无法使用他的“帐户”(403)更改它。
    【解决方案2】:

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

    401 不合适,因为它指的是带有 WWW-Authenticate 标头的授权,而会话 cookie 则不是。

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

    【讨论】:

    • 这在我实际定义一个基于 cookie 的 HTTP 身份验证方案时是可以解决的。
    • @Julian Reschke - 根据定义,cookie 与身份验证没有太大关系;主要是,他们为“无状态”协议 HTTP 添加了一些“状态”。 Cookie 本身不会验证任何内容。它们只是发送到服务器的信息,该服务器先前要求浏览器保存该信息。是的,该信息可用于确定您之前是否已通过用户身份验证(通常通过 HTTP POST / GET)。它还可以简单地用于指示您之前是否看过特定广告,或者之前和何时访问过该网站等。
    【解决方案3】:

    您可以利用测试条件并通过

    错误代码:401.1-登录失败。登录尝试失败,可能是因为用户名或密码无效。

    专门用于密码错误或用户名密码不匹配的情况。 希望对您有所帮助。

    【讨论】:

    • 有定义 401.1 的 RFC 吗?
    • HTTP 状态码由三位数字组成。线路上没有 NNN.N 之类的东西(除了可能在 message 中,它没有任何意义)
    • 我在 401.1 上找不到任何 RFC
    • 401.1 不是我编造的,微软在使用 asp.net 技术的网站中使用它。除了来自微软,我找不到任何其他参考。
    猜你喜欢
    • 2017-08-14
    • 1970-01-01
    • 2021-09-17
    • 2021-08-02
    • 2017-05-02
    • 2018-09-24
    • 2015-06-01
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多