2010-08-19 88 views
12

因此,在我的API中发送几个不同的状态标头,包括404,409,201,302等。现在我遇到了401 Unauthorized的问题。如果用户未登录(整个API由版权管理),或者用户不满足正在检索/修改的特定资源的特定访问要求,我目前正在发送它。在RESTful API中未登录与未经授权的不同HTTP状态

现在,我还控制前端客户端(一个jQuery/HTML应用程序),我想区分401这两种情况。有没有明显的状态,我应该使用未登录?处理它以将头部内容发送到头部的最佳方式是?

+0

类似的问题到https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses – 2017-06-13 09:22:52

回答

20

您应该使用403来指示用户未被授权访问资源。使用401用于指示用户需要提供凭证,就像您当前正在使用凭证一样。请参阅401403here的描述。

3

正如说,你应该使用403当你认证用户,但用户没有权限做她要求的东西。例如您可能允许GET'资源,但不允许DELETE或PUT。

  • 401是不正确的,因为它基本上是说,因为它说,“你不能这样做”

“我不认识这些凭据”

  • 403是正确的无论如何,响应机构应始终包含更多信息,even when it's an error response。这可以让客户找到出路,希望能够向前移动(使用嵌入式链接)或提供足够的关于如何进行的信息(例如“我的记录表明您无权删除XXX,请联系您的系统管理员并要求FOOBAR许可“)。

  • +0

    不是“没有权限FOOBAR XXX”吗? – Hello71 2010-09-19 00:22:30

    +0

    “没有权限删除XXX”被认为是对DELETE请求的回应,所以是的。如果你为一个PUT请求提供一个403,你应该适当地说出它。 FOOBAR的东西应该有“FOOBAR角色”。重点是告诉用户他们如何解决问题,但(错误消息设计)是另一个话题! – mogsie 2010-09-22 11:56:04