当第三方应用程序生成错误时,响应代码应该是什么?

时间:2016-11-23 10:08:45

标签: javascript http backend convention

我构建了一个Web应用程序,它基本上要求用户提供带有表单的凭据(对于随机的第三方服务,知道哪一个无关紧要)。 一旦用户使用第三方服务应用令牌填充表单,带有令牌的请求将发送到应用程序后端,后端获取令牌并向第三方服务发送请求以检查令牌是否有效。 此时,第三方服务会使用200 - {randomObject: object}401 - Unauthorized向后端返回回复。

所以这是我的问题:如果第三方服务返回401,后端应该返回200 - false还是401 - Unauthorized

我和我的同事一直在争论这件事。 我的观点是对应用程序后端的访问是经过授权的,并且参数是正确的(请求中存在令牌),因此响应应该是200,但响应的内容应该表明令牌是否有效。 他的观点是,由于令牌无效(因为第三方服务告诉后端),后端应该返回401 - Unauthorized

我们很清楚,我知道结果在两种情况下都是一样的,事实上这个功能已经起作用了,我只是想知道这个具体问题是否存在某种约定。< / p>

谢谢

4 个答案:

答案 0 :(得分:3)

我会选择400或401.

401可能会产生误导,因为您的API访问权限未经授权。 (特别是如果您的api也需要身份验证)

另一方面,

400可能是最好的:

  

400(错误请求)状态代码表示服务器不能或      由于被认为是某种东西,它不会处理请求      客户端错误

答案 1 :(得分:1)

我会说它应该是401还是。后端的工作方式应该与应用程序无关,因为它的内部工作对最终用户来说并不重要。您的身份验证服务告诉您它不是有效的事实应该足以让您抛出此错误。

答案 2 :(得分:0)

关于这个:

  

我的观点是授权访问应用程序后端   并且参数是正确的(请求中存在令牌),所以   响应应该是200

令牌的存在并不意味着请求有效。应使用401 Unauthorized,因为提供了无效凭据。来自httpstatuses.com

  

请求尚未应用,因为它缺少有效的身份验证   目标资源的凭据。

如果您认为它应该是200,因为凭据不是为您的服务,而是为了第三方服务,因此对您的服务的授权没有失败,这可能是有争议的,但在这种情况下,您仍然可能不希望返回200而是返回400 Bad Request,因为成功完成API操作的参数无效。

答案 3 :(得分:0)

我会对这种趋势不屑一顾,并说你应该返回200.

状态码401与HTTP认证有关。 W3C对状态代码有以下说法:

  

请求需要用户身份验证。 响应必须包含一个   包含挑战的WWW-Authenticate头字段(第14.47节)   适用于所请求的资源。客户端可以重复   请求具有合适的授权标头字段(第14.8节)。如果   请求已包含授权凭据,然后是401   回复表明授权已被拒绝   证书。如果401响应包含与之相同的挑战   先前的响应,用户代理已经尝试过   验证至少一次,然后用户应该出现   响应中给出的实体,因为该实体可能包含   相关的诊断信息。

source

由于您的服务器本身可能不使用HTTP身份验证,因此您无法返回带有质询的WWW-Authenticate标头,因此您无法正确遵循此规范。您正在调用的第三方API可以正确执行此操作,但这是由by。您的用户已经向您请求了一个页面,而不是直接请求第三方API,并且他们已经授权这样做。您的服务器决定他们不值得回复 - 其他人的服务器刚刚告诉您他们的令牌无效。

鉴于此,我将返回200.请求已成功。您的服务器能够返回指示第三方API调用失败的信息。