这里应该使用401 Unauthorized还是403 Forbidden?

时间:2011-04-08 00:39:14

标签: http authentication

我已经阅读了这个similar question,但它并不能让我满意。

我有两个用例。

  1. 匿名(未经身份验证的)用户尝试访问受保护(仅限授权)的资源
  2. 经过身份验证的用户尝试访问他无权访问的资源(即,不属于某个群组)
  3. 对于这两种情况,应该返回哪个错误代码?我猜第一个是401,第二个是403。但是对于401,响应中必须包含WWW-Authenticate标头。我不想使用基本的HTTP身份验证,而是选择更传统的基于表单的方法。 (即,用户从Login.aspx或其他任何方式提交表单)。

    我应该使用哪一个?

2 个答案:

答案 0 :(得分:2)

对于第一种情况,您应该使用401 Unauthorized

  

请求需要用户身份验证。响应必须包含WWW-Authenticate头字段(第14.47节),其中包含适用于所请求资源的质询。

对于第二种情况,您应该使用403 Forbidden

  

服务器理解请求,但拒绝履行请求。授权无效,请求不应重复。

编辑:似乎我没有RTFQ - 我的不好。

如果您不想使用HTTP身份验证,那么对于案例#1,您可能只想返回200 OK

...或307 Temporary Redirect指向登录屏幕 - 然后客户端307经过身份验证后返回原始网址。

对于案例#2 403仍然听起来是一个相当合理的回应 - 尽管第二个想法它可能是针对不应该提供给任何人的资源 - 因为404被建议作为有效的替代响应。

......所以也许情况#2也应该收到307或200响应。

答案 1 :(得分:1)

第二个403的第二个是我想的。