22

我正在开发一个 API,它也将具有身份验证/授权组件。

任何人,无论身份验证状态如何,都可以写入(POST),但取决于您是未经身份验证、作为普通用户身份验证还是作为管理员身份验证以及您尝试访问的资源我将返回不同的响应获取、删除和放置。

我正在尝试为未经过身份验证和/或授权的用户找出最合适的响应代码。

请记住http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

未经授权-> 401

禁止 -> 403

方法不允许 -> 405

让我们使用一个具体的例子:

  • John Doe 未经身份验证,在 DELETE 上他应该收到 401 还是 405?
  • Amy 已通过身份验证但未授权,在 DELETE 时她应该收到 403 还是 405?

(请记住,即使 John 和 Amy 被禁止或未经授权,这并不意味着他们无法使用不同的 HTTP VERB 访问相同的资源。)

谢谢。

4

2 回答 2

39

在这种情况下,我认为提供一些示例以进行澄清是有用的:

  • 未经身份验证 + 支持的方法 =401
  • 未经身份验证 + 不支持的方法 =405
  • 认证 + 授权 + 支持的方法 =2xx
  • 认证 + 授权 + 不支持的方法 =405
  • 已认证 + 未授权 + 支持的方法 =403
  • 已认证 + 未授权 + 不支持的方法 =405

换句话说,从程序的角度来看:

  1. 检查是否支持方法。如果不:405
  2. 如果支持,请检查用户是否已通过身份验证。如果不:401
  3. 如果已通过身份验证,请检查用户是否已获得授权。如果不:403
  4. 如果授权:2xx

编辑:我偶然发现了这张图,并认为它可能对任何可能偶然发现这篇文章的人有用。点击放大。

在此处输入图像描述

原文在这里

于 2016-02-02T15:25:22.480 回答
13

405 Method Not Allowed仅当您不支持该方法时才应使用。它不应该用来告诉客户他们不能使用这种方法。

因此,在您的情况下,唯一好的 HTTP 代码是401 Unauthorized. 它指示客户端该方法存在并且他们需要登录才能访问它。

于 2012-06-26T04:15:32.303 回答