18

在对用户进行身份验证然后发现他们在注册后没有激活他们的帐户后,我应该响应哪个 HTTP 状态代码?

4

3 回答 3

29

401 表示用户未知(根本没有经过身份验证或身份验证不正确,例如凭据无效)。
403 表示用户已知但未授权(即没有适当的角色/组)。

您还可以将已注册但未激活的帐户解释为具有特定角色(如“未激活”)和/或缺少适当角色的用户。403 在您的特定情况下更合适。

于 2013-03-25T18:15:08.157 回答
1

@Josh Davenport:您在彼此的位置描述了授权和身份验证:身份验证是凭据检查,授权是角色/组分配。

另一方面,正如您在对自己的评论中所说,401 假设同时失败的身份验证和授权。用户需要同时失败才能获得 401。403 用于完全禁止数据并且根本不执行/不需要身份验证的情况。

打个比方:401 = 检查凭据的检查点。403 = STOP 标志,无法进入。

要回答 OP 的问题:401 在逻辑上是未激活帐户的状态代码,但由于它需要 HTTP-Auth 实现,如果您通过其他方式进行身份验证和授权,则可以使用 403 代替它。我个人仍然会坚持 401,因为标准不一定涵盖所有现实生活中的情况。现在几乎没有人使用 HTTP-Auth 进行身份验证。

于 2013-03-26T07:36:03.993 回答
1

如果您认为未激活的帐户不应该被授权,那么响应肯定应该有一个401 Unauthorized状态码。

我认为403 Forbidden也是合适的,是的。但是,在您的情况下,我认为 401 Unauthorized 更合适。

这个答案很好地总结了两者,引用了 401 Unauthorized :

如果请求已包含授权凭证,则 401 响应指示已拒绝对这些凭证的授权。

这当然适用,因为您的案例表明他们已经提供了凭据,但这些凭据无效,因为该帐户尚未激活(您认为这是未经授权的)。

于 2013-03-25T17:12:11.667 回答