RESTful API中未登录与未授权的不同HTTP状态

Ste*_*ven 18 rest http http-status-codes http-status

所以派几个不同的状态标题在我的API,包括404,409,201,302等.现在我遇到了问题401 Unauthorized.我正在发送它,如果用户未登录(整个API是权限管理),或者如果用户不满足正在检索/修改的特定资源的特定访问要求.

现在,我还控制前端客户端(jQuery/HTML应用程序),我想区分这两种情况401.我是否应该使用未登录的独特状态?处理它的最佳方法是在标题旁边发送正文内容吗?

laz*_*laz 25

您应该403用来表示用户无权访问该资源.使用401is表示用户需要提供凭证,就像您当前使用它一样.见的描述401403 这里.


mog*_*sie 5

正如laz所说,你应该403在你对用户进行身份验证时使用,但是用户没有权限去做她要求的事情.例如,你可能允许获取资源,但不允许删除或删除.

  • 401会不正确,因为它基本上说"我不认识这些凭据"
  • 403是正确的,因为它说"你不允许这样做"

在任何情况下,响应主体应始终包含更多信息,即使它是错误响应.这允许客户端出路,希望前进(使用嵌入式链接)或提供有关如何继续的足够信息(例如"我的记录表明您没有删除XXX的权限,请联系您的系统管理员并要求FOOBAR许可").