代码之家  ›  专栏  ›  技术社区  ›  Jakub Å turc

对未经授权的HTTP请求的正确响应是什么?

  •  1
  • Jakub Å turc  · 技术社区  · 17 年前

    我正在编写Web应用程序,我不确定对未授权请求的正确响应是什么。对于用户来说,当服务器响应302并将其重定向到登录页面时,这很方便。但在内心深处,我觉得401更正确。我也不担心302不能被搜索引擎曲解。

    那么,您如何响应未经授权的请求呢?


    编辑

    我正在使用ASP.NET MVC。从理论上讲,这并不重要。但是,ASP.NET表单身份验证使用302方法。

    我也喜欢当用户成功登录到他被请求的页面后被重定向的行为。我不确定这是否可以用401方法轻松实现。

    6 回复  |  直到 12 年前
        1
  •  1
  •   dave4420    17 年前

    发送401响应,并在返回的页面上包含一个登录表单。(也就是说,不要只包含一个到登录页面的链接,包括整个表单。)

        2
  •  4
  •   tvanfosson    17 年前

    我认为正确的回答完全取决于请求的上下文。在一个用于人(而不是机器)使用的Web应用程序中,如果用户没有经过身份验证,我宁愿重定向到登录,如果用户经过身份验证,但没有得到授权,我宁愿呈现一个错误页面。我通常不会返回未经授权的响应,因为它包含的信息太少,一般用户无法帮助他们使用应用程序。

    对于Web服务,我可能会使用未经授权的响应。由于它通常由另一端的程序使用,因此不需要提供描述性错误消息或重定向。使用该服务的开发人员应该能够识别对其代码所做的正确更改,以便正确地使用该服务——假设我已经做好了用示例记录接口使用的工作。

    至于搜索引擎,一个正确构造的robots.txt文件可能在限制它 公众的 页。

        3
  •  2
  •   Alexis Wilke    12 年前

    401在语法上似乎是正确的,但是401实际上是一个返回到浏览器请求凭据的语句——浏览器随后会希望检查www-authenticate头,以便它可以挑战用户输入正确的详细信息。

    引用规范。

    请求需要用户 身份验证。响应必须 包括WWW认证头 字段(第14.47节)包含 适用于被请求人的挑战 资源。客户可以重复 以适当的授权请求 标题字段(第14.8节)。如果 请求已包含授权 凭证,然后是401响应 表示授权已经 拒绝这些证书。如果 401响应包含相同的 作为先前回应的挑战,以及 用户代理已尝试 身份验证至少一次,然后 应向用户展示实体 这是在答复中给出的,因为 该实体可能包括 诊断信息。HTTP访问 “http”中解释了身份验证 身份验证:基本和摘要 访问认证“[43]。

    如果你做302,你至少保证用户将被引导到一个页面,在使用非标准登录时,他们可以在那里登录。我不太在乎搜索引擎之类的公司对401的看法。

        4
  •  1
  •   Richard    17 年前

    我不得不同意你的看法,401的结果实际上是正确的回答。

    也就是说,为什么没有一个设计良好的定制401页面,显示未经授权的消息以及登录页面的链接,您可以使用15秒的javascript倒计时自动将它们发送到那里。

    通过这种方式,您可以对bot给出正确的401响应,告诉bot页面受到限制,但实际用户在被告知访问安全资源后会被重定向。

        5
  •  1
  •   Alexis Wilke    12 年前

    如果你的网站主要是人类使用的,不要为搜索引擎操心。当用户访问受保护的页面时,理想的方法是将其重定向到登录页面,以便在成功登录后将其转发到受保护的页面。

    除非您计划在错误页面中包含登录表单,否则您无法通过401错误完成此操作。从可用性的角度来看,第一种情况(302)更为合理。

    此外,您还可以编写代码将人重定向到您的登录页面,并将搜索引擎重定向到401。

        6
  •  0
  •   Wyatt Barnett    17 年前

    首先,搜索引擎将如何索引安全页面?未经授权的用户,比如僵尸,不应该一开始就这么做。