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



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

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

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

我们很清楚,我知道结果在这两种情况下都是一样的,事实上,这种功能已经起作用,我只想知道关于此特定问题有某种惯例。<<<<<<<<<<

谢谢

我会选择400或401。

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

另一方面400最好:

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

我会说应该是401。后端的运作不应与应用程序有关,因为它的内部工作对最终用户并不重要。您的身份验证服务告诉您这不足以使您丢弃此错误的事实。

我的意思是授权对应用程序后端的访问 并且参数是正确的(请求中存在一个令牌),因此 响应应为200

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

由于缺乏有效的身份验证,该请求尚未应用 目标资源的凭据。

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

我会稍微降低趋势,并说您应该返回200。

状态代码401与HTTP身份验证有关。W3C在状态代码上有以下内容:

请求需要用户身份验证。响应必须包括 www-paptenticate标头字段(第14.47节),其中包含挑战 适用于请求的资源。客户端可以重复 请求使用合适的授权标题字段(第14.8节)。如果 该请求已经包括授权凭证,然后包括401 响应表明已拒绝授权 证书。如果401响应包含与 事先响应,用户代理已经尝试 至少进行身份验证一次,然后应向用户介绍 响应中给出的实体,因为该实体可能包括 相关诊断信息。

(源)

由于您的服务器大概没有使用HTTP身份验证本身,因此您不会在挑战中返回www-partenenticate标头,因此您不会正确遵循此规范。您要打电话的第三方API可以正确执行此操作,但这就是by。您的用户已向您请求页面,而不是直接的第三方API,并且 有权这样做。您的服务器没有决定他们不值得有效响应 - 其他人的服务器刚刚告诉您,他们的令牌无效。

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

最新更新