400是OAuth验证错误(http)的适当错误代码吗?

400是OAuth验证错误(http)的适当错误代码吗?,http,facebook-graph-api,oauth,response,Http,Facebook Graph Api,Oauth,Response,大家好:对于包含无效oauth令牌的请求,正确的http响应代码应该是什么 错误代码400似乎有误导性,因为我认为无效的oauth不是格式错误的请求 奇怪的是,FacebookOAuth令牌(如果无效)会导致api返回result,如果400响应代码正确,则返回result 401未经授权应该是示例中响应状态代码的主要选择 编辑: 我花了一些时间浏览OAuth2草案,当客户端身份验证失败时,它们似乎指定了以下内容: 通常必须响应400错误请求,但是 可能会以401未经授权的响应,以及 如果尝试

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

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

奇怪的是,FacebookOAuth令牌(如果无效)会导致api返回result,如果400响应代码正确,则返回result

401未经授权
应该是示例中响应状态代码的主要选择

编辑:

我花了一些时间浏览OAuth2草案,当客户端身份验证失败时,它们似乎指定了以下内容:

  • 通常必须响应
    400错误请求
    ,但是
  • 可能会以
    401未经授权的
    响应,以及
  • 如果尝试使用
    授权
    请求标头进行身份验证,则必须以
    401未经授权
    响应。如果是这样,它还必须在响应中包含
    WWW-Authenticate
来自


所以401是对的。

Hmmm。。。有没有想过facebook为什么要在糟糕的OAuth上实现400返回?好吧,我自己已经实现了一个OAuth提供者,我只能说,我不认为让所有的响应代码都正确是件小事。为了达到我想要的目的,我不得不进行一些重构。在facebooks的案例中,我只能猜测他们忽略了它,或者根本不认为它值得做。另一方面:developers.facebook.com上有超过1000个开放的bug,它们似乎都没有解决这个问题。在我阅读RFC 6749时,无效令牌案例属于
无效授权
,而不是
无效客户端
,因此应该是
400个错误请求
,没有
WWW-Authenticate
。不过,我同意RFC确实不清楚。更正:仅指对令牌的请求,而不是带有令牌的请求。它看起来确实指定了
401 Unauthorized
,并且需要
WWW-Authenticate
。这是针对Oauth 1.0的-对于Oauth 2.0(Facebook使用的)可能有所不同-可能会指定其他方式(我没有阅读规范,所以我不确定)定义“无效Oauth”。使用错误/缺失的客户机或作用域也可能被视为格式错误的请求(但高于HTTP级别)。
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