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

Fra*_*rio 5 http http-status-codes

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

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

如果重要的话,这个 REST 登录 API 正在被一个网络应用程序和一个 iPhone 应用程序使用。

小智 2

我相信您之所以难以找到合适的 HTTP 状态代码,是因为 RESTful 登录 Web 服务是一个矛盾的事实。也就是说:RESTful API 端点公开了 HTTP 动词所操作的资源。登录到服务是一个过渡操作(例如建立会话或类似操作)。因此,您的 RESTful API 为该过渡操作返回 HTTP 状态代码是不自然的。

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

RESTful 调用以创建会话

POST /api/sessions/
response would be
201 - Created
/api/sessions/12345abcdef
Run Code Online (Sandbox Code Playgroud)

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

然后注销就是

DELETE /api/sessions/12345abcdef
Run Code Online (Sandbox Code Playgroud)

但我怀疑这离纯粹 RESTful 的道路有点太远了