【问题标题】:Is 400 the appropriate error code for OAuth verification errors (http)?400 是 OAuth 验证错误 (http) 的适当错误代码吗?
【发布时间】:2012-01-03 19:10:13
【问题描述】:

大家好:对于虽然格式正确但包含无效 oauth 令牌的请求,正确的 http 响应代码应该是什么?

错误代码 400 似乎具有误导性,因为我相信无效的 oauth 不是格式错误的请求。

奇怪的是,如果 400 响应代码,facebook oauth 令牌(如果无效)会在返回结果中导致 api 返回结果......

【问题讨论】:

  • 定义“无效的 oauth”。使用错误/缺失的客户端或范围也可能被视为格式错误的请求(但高于 HTTP 级别)。

标签: http facebook-graph-api oauth response


【解决方案1】:

来自http://oauth.net/core/1.0a/#http_codes

HTTP 400 Bad Request
    Unsupported parameter
    Unsupported signature method
    Missing required parameter
    Duplicated OAuth Protocol Parameter
HTTP 401 Unauthorized
    Invalid Consumer Key
    Invalid / expired Token
    Invalid signature
    Invalid / used nonce

所以 401 是对的。

【讨论】:

【解决方案2】:

正确。

401 Unauthorized 应该是您示例中响应状态代码的主要选择。

编辑:

我花了一些时间浏览 OAuth2 草案,看起来他们在客户端身份验证失败时指定了以下内容:

  • 通常必须回复 400 Bad Request,但是
  • 可以回复401 Unauthorized,并且
  • 如果尝试使用Authorization 请求标头进行身份验证,则必须以401 Unauthorized 响应。如果是这样,它还必须在响应中包含WWW-Authenticate

【讨论】:

  • 嗯...关于为什么 facebook 对不良 oauths 实施 400 回报有任何想法吗?
  • 好吧,我自己实现了一个 OAuth 提供程序,我只能说我认为正确获取所有响应代码并不是一件容易的事。我必须进行相当多的重构才能到达我想要的位置。在 Facebook 的情况下,我只能推测他们忽略了它,或者根本不认为它值得做。附带说明:developers.facebook.com 上有超过 1000 个未解决的错误,但似乎没有一个解决这个问题。
  • 在我阅读 RFC 6749 时,无效令牌案例属于 invalid_grant 而不是 invalid_client,因此应该是 400 Bad Request,没有 WWW-Authenticate。不过,我同意 RFC 确实不清楚。
  • 更正:RFC 6749 section 5.2 仅指对令牌的请求,而不是对 with 令牌的请求。看起来RFC 6750 section 3 确实指定了401 Unauthorized 并且需要WWW-Authenticate
猜你喜欢
  • 2015-12-23
  • 2016-05-23
  • 1970-01-01
  • 2016-08-14
  • 2019-12-22
  • 2022-10-21
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
相关资源
最近更新 更多