无法使用Facebook OAuth获取访问令牌

时间:2012-12-23 12:16:22

标签: php facebook facebook-graph-api oauth facebook-access-token

大约一周前,我网站上的Facebook登录工作正常,但现在当我尝试使用“代码”检索访问令牌时,我收到错误“此授权代码已被使用”。我检查了很多文档和建议,但没有任何结果。

重现步骤(使用FB PHP SDK):

  1. 使用正确的urlencoded返回uri(带尾随斜杠)将用户发送到FB auth:

    https://www.facebook.com/dialog/oauth?client_id=[my_cid]&redirect_uri=http%3A%2F%2Fmydomain.com%2Fauth%2Ffacebook%2F&state=e15e0894cd922098f9f8f340c820538d&scope=email&display=page
    
  2. 在我的重定向uri上接收代码参数(一切正常)

  3. 发送访问令牌请求:

    https://graph.facebook.com/oauth/access_token?client_id=[my_cid]&redirect_uri=http%3A%2F%mydomain.com%2Fauth%2Ffacebook%2F&client_secret=[my_secret]&code=[long_code_goes_here]
    
  4. 我也尝试过不是urlencoded redirect_uri。

    为什么?

1 个答案:

答案 0 :(得分:2)

这是由于Facebook更改到目前为止已经可选,但将于12月5日推出给所有人。从12月12日突破变化的Developer Roadmap开始:

  

OAuth授权码的新安全限制   我们只会   允许授权代码一次性交换访问令牌   将要求他们在10内交换访问令牌   他们创作的几分钟。这符合OAuth 2.0规范   从一开始就说“授权代码必须是   短期和单次使用“。有关更多信息,请查看我们的   身份验证文档。

因此,当您第一次获得用户的access_token时,您需要存储它,然后在用户下次需要与FBAPI交互时显式设置它:$ facebook-> setAccessToken($ theToken);