【问题标题】:Can't get access token using Facebook OAuth无法使用 Facebook OAuth 获取访问令牌
【发布时间】:2012-12-10 06:11:15
【问题描述】:

大约一周前,我网站上的 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]
    

我也试过没有 urlencoded redirect_uri。

为什么?

【问题讨论】:

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


    【解决方案1】:

    这是由于 Facebook 的更改到目前为止是可选的,但将于 2012 年 12 月 5 日向所有人推出。来自 Developer Roadmap 的 2012 年 12 月重大更改:

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

    所以,当你第一次为用户获取一个 access_token 时,你需要存储它,然后在用户下次需要与 FBAPI 交互时显式设置它:$facebook->setAccessToken($theToken);

    【讨论】:

    • 所以如果我得到用户的令牌并且下次不调用setAccessToken,我以后不能调用它吗?
    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 2015-05-05
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多