【问题标题】:Facebook Graph API authentication for simple information retrieval用于简单信息检索的 Facebook Graph API 身份验证
【发布时间】:2012-07-21 01:41:40
【问题描述】:

为了解决a question on Stack Exchange Web Applications 中详述的问题,我编写了一个小的 PHP 脚本,该脚本给出了一个页面名称和一个适当的 access_token,该脚本将该页面创建的事件作为 iCal 日历文件吐出。显然,这个文件不应该被人类访问,而是被例如谷歌日历订阅。

我通过 Facebook Graph Explorer 创建了 access_token,后来才意识到它已过期。那么问题来了:我可以得到一个不会过期的页面 access_token 吗?如果做不到这一点,我可以得到一个有效期很长的吗?

如果这是不可能的 - 有没有人知道该怎么做?每小时手动提供一次 access_token 感觉不太可行。

【问题讨论】:

  • 首先获取一个长期存在的用户访问令牌(参见developers.facebook.com/roadmap/offline-access-removal)。如果您使用它获取页面访问令牌,则后者默认不会过期。
  • 谢谢@CBroe!这个提示让我走上了正轨。我已在答案中详细说明了我的解决方案,请参见下文。

标签: php facebook facebook-graph-api google-calendar-api


【解决方案1】:

@CBroe 让我走上了正轨,@MPaulo 进一步帮助了我。以下是我在创建的脚本文件开头解释该过程的方法,该脚本文件用于解决我在上述问题开头链接到的问题中描述的问题。


首先,您需要一个访问令牌。这是一件复杂的事情 - 获得一个普通的很容易,但我们想要一个永久持续的。如场景 5 所述:https://developers.facebook.com/roadmap/offline-access-removal/,我们需要:

  1. 获取常规的短期访问令牌
  2. 将其换成长期访问令牌
  3. 使用我们的新访问令牌,获取永久页面访问令牌。

首先,在 https://developers.facebook.com/apps/ 创建一个新的 Facebook 应用。它可以随便命名,它不会被真正使用。填写一个域 - 哪个没关系,只需要一个显示简单 HTML 且不执行任何重定向的域:我使用自己的静态网页 http://jobjorn.se/ ,但 http://example.org/ 也可以工作。

按照 MPaulo 在 Stack Overflow 上的指示:https://stackoverflow.com/a/11238327/564628,使用应用 ID - 来自您新创建的应用 - 并访问此页面: https://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&redirect_uri=MY_SITE_URL&scope=manage_pages&response_type=token 请务必替换“MY_APP_ID”和“MY_SITE_URL”。

然后,通过访问此页面将您的短期访问令牌换成长期访问令牌: https://graph.facebook.com/oauth/access_token?client_id=MY_APP_ID&client_secret=MY_APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=YOUR_ACCESS_TOKEN 请务必替换“MY_APP_ID”、“MY_APP_SECRET”和“YOUR_ACCESS_TOKEN”(最后一个是您从第一页收到的访问令牌)

最后,在此处获取您的页面访问令牌: https://graph.facebook.com/me/accounts?access_token=YOUR_NEW_ACCESS_TOKEN 请务必替换“YOUR_NEW_ACCESS_TOKEN”(您从第二页收到的访问令牌)

粘贴在下面。它应该是永久性的,但由于一个错误,它可能只持续两个月 - 有关详细信息,请参阅 https://developers.facebook.com/bugs/151056591697025。不过好像已经修好了。你可以在这里测试:https://developers.facebook.com/tools/debug/access_token

【讨论】:

    【解决方案2】:

    创建一个应用并使用该应用的凭据进行身份验证。只要您不读取用户特定数据,就不需要用户 access_token。

    【讨论】:

    • 我正在读取用户特定的数据 - 要通过 API 访问页面的事件,您必须是页面的管理员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    相关资源
    最近更新 更多