api - 如果第 3 方 API 身份验证失败,我的 API 应该返回哪些 HTTP 错误代码?

标签 api http rest oauth

我正在编写一个 REST-ish API 服务,它提供了通过 OAuth 与其他第 3 方服务(它们本身是 REST API)中的最终用户数据进行交互的能力。一个常见的例子可能是将数据从我的服务发布到第三方服务,例如 Facebook 或 Twitter。

例如,假设我与最终用户和 Facebook 执行 OAuth 舞蹈,产生了一些短期访问 token ,我的服务可以使用该 token 与用户的 Facebook 帐户进行交互。如果该访问 token 过期并且用户尝试使用我的服务发布到 Facebook,我会向用户返回什么样的错误?

401 对我来说似乎不太合适;似乎 401 将通过我的服务应用于用户的身份验证状态。 403 似乎更合适,但也很通用。

最佳答案

401 是要走的路。定义 HTTP 协议(protocol)的 RFC2616 的两个摘录:

第 10.4.2 节(约 401):

If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials.

这似乎适用于过期的 token 。存在身份验证凭据,但它们被拒绝,因此用户代理必须重新进行身份验证。

第 10.4.4 节(约 403):

The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated.

当尽管有用户凭据仍无法访问资源时,应使用此方法。可能是仅适用于美国的网站/API 被亚洲 IP 攻击或已被宣布为有害且已停用的网页(因此内容已找到,但服务器拒绝为其提供服务)。

在 OAuth2 上,推荐的工作流程取决于 token 的传递方式。如果通过 Authorization header 传递,服务器可能会返回 401。当通过查询字符串参数传递时,最合适的响应是 400 Bad Request(不幸的是,HTTP 拥有的最通用的请求)。这是由 OAuth2 规范的第 5.2 节定义的 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-26

关于api - 如果第 3 方 API 身份验证失败,我的 API 应该返回哪些 HTTP 错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705884/

相关文章:

http - 使用边界定界符进行 HTTP 服务器响应

asp.net - 在 ASP.NET 中创建 Web API

api - 使用 Lambda 的 Amazon Gateway API - 无法将请求正文解析为 json

c# - 使用 Sears API 的 Web 请求

json - 带有RESTful服务的JAX-RS与UrlMappings的Grails

rest - Firebase Cloud Messaging 如何退订主题

java - 使用 Java 和 REST 发送 Apple 推送通知时出现问题

json - wordpress json rest API 获取自定义字段数据

http - Dropwizard Environment 类意外地将 Jersey Client 请求主体编码为 UTF 以外的格式。

python - 在 python 请求中发送原始数据