这是一个概念上的问题。
我有一个客户端(移动)应用程序,它需要支持对一个RESTful Web服务的登录行为。 因为Web服务是基于REST的,这相当于给客户端接受来自用户的用户名/密码,用服务验证用户名/密码,然后只需记住与所有后续请求发送用户名/密码。
在这个Web服务的所有其它响应以JSON格式提供。
问题是,当我查询的Web服务只是为了找到一个给定的用户名/密码是否有效,如果Web服务,告诉我它的成功或不成功JSON数据总是响应,或者它应该在良好的凭证和HTTP返回HTTP 200 401不正确的凭据。
我想问的原因是,一些其他的RESTful服务使用401不正确的凭据,即使你只是问凭据是否有效。 然而,我的401级的响应理解是,他们代表的是你不应该有没有有效凭证对资源的访问。 但登录资源应该可以访问到任何人,因为登录资源的全部目的就是要告诉你,如果你的证书有效。
换句话说,在我看来,一个要求如:
myservice.com/this/is/a/user/action
如果提供不正确的凭据应该返回401。 但要求如:
myservice.com/are/these/credentials/valid
因为特定的URL(请求)被授权或者没有有效凭证不应该返回401。
我想听到一些合理意见的一种方式或其他在此。 什么是解决这个的标准方法,是处理这种逻辑上适当的标准呢?
第一关。 401是正确的响应代码时登录失败发生在发送。
401未授权到403故宫相似,但专为当需要验证和已发生故障或尚未提供使用。 应对措施必须包括包含适用于请求资源的挑战WWW身份验证头字段。
您对混乱, myservice.com/are/these/credentials/valid
发回401时,你只是做了检查,我觉得是基于一个事实,即在做REST布尔请求往往是错误的REST式的约束。 每个请求都应该返回的资源。 在RESTful服务做布尔问题是湿滑的单桅帆船到RPC。
现在,我不知道你看了上的服务是如何表现。 但是,解决这个的好办法是有类似Account对象,你设法得到。 如果凭据是正确的,你会得到Account对象,如果你不想浪费带宽只是一个“检查”你可以做一个头相同的资源。
Account对象也是存储所有那些讨厌的布尔值,否则将是棘手的,为创建单独的资源的好地方。
401应仅在请求需要授权首标字段和授权失败发送。 由于登录API不需要授权的,因此401在我看来是不正确的错误代码
按照此标准https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
* 10.4.2 401未授权
请求需要用户认证。 的响应必须包含含有适用于所请求的资源是一个挑战一个WWW-Authenticate头字段(部分14.47)。 客户端可以重复与合适的授权首标字段(部分14.8)的请求。 如果请求已经包含了授权证书,那么401响应表示认可已经拒绝了这些凭据。 如果401响应包含相同的挑战,因为事先反应,用户代理已经尝试至少一次身份验证,那么用户应该提出这是在响应中给出的,因为这个实体可能包括有关的诊断信息的实体。 HTTP访问认证中所说明的“HTTP认证:基本和摘要访问认证” [43] *。