这是一个概念性问题。RESTful登录失败:返回401或自定义响应
我有一个客户端(移动)应用程序,它需要支持针对RESTful Web服务的登录操作。因为Web服务是RESTful的,所以这相当于客户端接受用户的用户名/密码,用服务验证用户名/密码,然后只记得将所有后续请求发送给用户名/密码。
此Web服务中的所有其他响应均以JSON格式提供。
问题是,当我查询Web服务时,只是为了找出给定的用户名/密码是否有效,Web服务是否总是以JSON数据响应告诉我它成功或失败,或者是否应该返回HTTP 200良好的凭证和HTTP 401凭证不良。
我问的原因是,即使您只是询问凭据是否有效,其他一些RESTful服务也会使用401作为错误凭据。但是,我对401响应的理解是,它们代表的是一种资源,如果没有有效的凭据,您将无法访问该资源。但是登录资源应该是任何人都可以访问的,因为登录资源的全部用途是告诉你你的凭证是否有效。
换句话说,在我看来,像一个请求:
myservice.com/this/is/a/user/action
应该返回401,如果提供不正确的凭据。但一个请求,如:
myservice.com/are/these/credentials/valid
永远不应该返回401,因为该特定的URL(请求)被授权有或没有有效凭证。
我想听到一些有道理的意见。处理这种情况的标准方式是什么,并且是处理这种逻辑合适的标准方式?
你关于返回资源的观点似乎有效,也许这是正确的举措。至于说401是正确的回应,我会很感激那里的一些解释。我已经阅读了HTTP规范,就像你在这里所包含的那样,但对我而言,这并不是对你的断言的直接而明显的确认。也就是说,认证不需要询问认证的有效性 - 但是你所包含的内容是“专门用于需要认证时使用”。 – Matt 2012-07-30 04:21:55
你的看法是正确的。您无需进行身份验证即可查询您的账户对象。但是,您需要成功进行身份验证才能够接收资源,并且需要进行身份验证,失败或尚未提供的身份验证,因为您不要求提供凭证的有效性,但是对于特定资源根据您提供的凭据。 – Cleric 2012-07-30 04:31:22
对,我猜我的含义不明确。如果一个账户资源被退还,我在你的同一页面 - 我同意你的立场。当我再次询问401时,我的意思只是针对我要求有效性的情况。我知道这是来自REST方法的“错误”,但我只想为这个问题得出结论。因此,如果我做错了错误的事情并要求有效性作为布尔返回,那么返回401是否不合适,因为该请求/查询实际上不需要身份验证? – Matt 2012-07-30 07:23:16