登录失败时返回的正确状态代码

时间:2014-05-28 16:59:21

标签: http http-status-codes

我有一个RESTful登录Web服务。但是,内部一直在争论在传递给它的一组凭据无效的情况下最好返回什么状态代码。我一直在回401;但这似乎不正确,因为它暗示您必须已登录才能使用登录服务。还讨论了403;但这意味着您已经过身份验证但受限于使用给定资源。也许404;因为无法找到所述凭证的用户。

如果凭据无效,从登录服务返回的正确状态代码是什么?

如果重要,这个REST登录API将被Web应用程序和iPhone应用程序使用。

4 个答案:

答案 0 :(得分:2)

我相信您努力寻找合适的HTTP状态代码是因为RESTful登录Web服务是一个矛盾的事实。即:RESTful API端点公开HTTP谓词运行的资源。登录服务是过渡动作(例如,建立会话或类似)。因此,RESTful API为此过渡操作返回HTTP状态代码是不自然的。

话虽如此,您没有指定端点是什么,或提供线索的运作方式。我可以推测,RESTful API登录服务理论上可以这样运作:

RESTful调用以创建会话

POST /api/sessions/
response would be
201 - Created
/api/sessions/12345abcdef

因此客户已“登录”。显然,我假设某些凭据将通过标头或查询参数传递。

然后退出将是

DELETE /api/sessions/12345abcdef

但我怀疑这在纯RESTful路径的路径上有点太过分了

答案 1 :(得分:1)

401 Unauthorized怎么样?

我建议这样做,因为对该页面的评论表明,“当需要进行身份验证且失败或尚未提供时,将使用此响应。”

答案 2 :(得分:0)

400 Bad Request如何?同样,您指定的参数(不正确的登录凭据)对您尝试执行的操作无效(创建登录会话)。

答案 3 :(得分:0)

200

内容可以是:

{
  isLoggedIn: false,
  reason: "wrong password"
}

此外,当登录操作成功执行后,您可以返回201,因为您可能已经创建了会话或令牌会话。登录操作本身将在服务器上创建一个会话,因此您可能会返回一些内容以供后续调用使用。
当提供的用户名/电子邮件错误(不存在)或 404 错误时,您可以返回不同的原因(“找不到用户”、“帐户被阻止”)。

相关问题