持久的FB访问令牌,用于服务器提取FB页面信息

时间:2012-08-28 22:31:20

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

我知道有很多关于Facebook访问令及其引起的悲痛的问题,但尽管进行了大量实验并阅读了许多令人沮丧的模糊博客文章(FB等),我仍然在努力寻找明确的答案根据我的需要。到目前为止,让我简洁地分解我的过程:

  • 我正在创建一个站点,服务器端需要从单个Facebook页面中提取帖子/状态
  • 我是Facebook页面的管理员
  • 我创建了一个Facebook App
  • 使用Facebook Graph API Explorer,我生成了一个与我的应用和帐户相关联的短期密钥,授予我的帐户权限以查看我的网页的访问权限
  • 我已将我的短期密钥转换为长期密钥(60天)ala来自this的方案4

这就是我被困的地方。我的60天密钥适用于我的服务器从页面中提取所需的信息,但据我所知,没有办法以编程方式扩展该60天密钥。我也不知道如何生成新的短期密钥,而无需手动访问Facebook Graph API Explorer并创建一个。

由于我的服务器向Facebook API发出请求而不是基于用户的系统(我可以轻松请求用户再次授权Facebook应用程序),这会创建一个非常笨重的系统。由于Facebook已弃用offline_access,是否真的没有永久的方法让我的服务器从我自己的页面提取信息?我是否真的必须手动创建一个新密钥并每60天手动更新一次我的服务器?

或者有什么东西我不见了?

更新

  

之前在此处找到的分步指南已迁移到自己的answer

5 个答案:

答案 0 :(得分:181)

  

这些是以前在问题中的步骤 - 它们已迁移到此答案。

我们发现有可能生成一个未过期的Facebook页面访问令牌(在@Igy的帮助下),这里有一个明确的,逐步的提示,适用于所有相同的人:

  1. 确保您是希望从
  2. 获取信息的FB页面的管理员
  3. 创建一个FB应用程序(应该使用与该页面管理员相同的用户帐户)
  4. 转到Facebook Graph API Explorer
  5. 在右上角,从“应用程序”下拉列表中选择您创建的FB应用程序
  6. 点击“获取访问令牌”
  7. 确保添加manage_pages权限
  8. 通过进行此Graph API调用,将此短期访问令牌转换为长期访问令牌: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  9. 抓住返回的新的长期访问令牌
  10. 使用新的长期访问令牌进行图谱API调用以查看您的帐户:https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  11. 中抓取您要提取信息的页面access_token
  12. Lint令牌,以确定它已设置为Expires: Never
  13. 应该这样做。您现在应该拥有一个不会过期的Facebook页面访问令牌,除非:

    • 您更改了您的Facebook帐户密码
    • 您失去了目标网页的管理员权限
    • 您删除或取消授权您的Facebook应用

    其中任何一项都会导致访问令牌无效。

    如果您收到(#100) Tried accessing nonexisting field (accounts) on node type (Page),请转到Access Token Debugger,复制User ID的值,然后在步骤9中将其替换为网址的“我”部分。 / p>

答案 1 :(得分:15)

Offline Access deprecation文档

中介绍了这一点

使用页面管理员的60天令牌检索页面访问令牌(通过/PAGE_ID?fields=access_token/me/accounts) - 页面访问令牌将没有到期时间

答案 2 :(得分:2)

一种在2019年有效的方法

我最近试图实现类似的目的(与该线程中描述的用例相似),但是我想确保尊重Facebook当前的政策,所以我做了一些研究,在此我分享了我发现的内容。

我的用例

因此,正如我已经说过的,我的用例与此处描述的用例非常相似;即:

  • 我正在为学区做一些工作。
  • 他们正在使用软件工具来管理几乎所有与学校交通有关的事情。
  • 该工具允许他们在发布公交车延迟警报和学校停课警报时向订户发送电子邮件通知。
  • 社区中的很多人都在其Facebook页面上关注该组织,这是他们寻找这些警报的唯一地方。
  • 因此,该组织的员工除了在运输软件中创建通知外,还必须在Facebook页面上手动发布每个通知。而且,这些通知最终会过期(或在过期之前被删除),因此员工必须稍后再手动删除它们。
  • 这是很短的时间,所以我们在这里要做的是开发一个简单的系统,该系统定期在软件工具的数据库中轮询新的(和过期的)通知,并在Facebook页面上更新(即添加和删除) 。

在我看来,这是一个合法的用例,但是我不确定如何以符合Facebook政策的方式来实现它。

可接受的答案

我遵循了已接受答案的步骤,并且该方法可以正常工作,但情况似乎有所变化:现在,即使生成的页面令牌没有过期,access to data也会在60天后过期。如果您按照以下步骤操作并检查FB Token Debugger Tool中的页面令牌,也会看到这一点。

此外,不幸的是,生成的页面令牌与用户帐户绑定的事实也很不幸,因为如果用户更新他/她的密码,则页面令牌也会失效。

如何在2019年做

经过几个小时的研究,我偶然发现了以下Facebook文档文章:Business Login for Direct Businesses

事实证明,现在可以按照上述文章中所述的步骤,生成与任何特定Facebook用户帐户都不相关且不会过期的页面令牌(除非FB App被删除或基础应用程序令牌被删除,您知道...)

这是步骤和最重要的部分:

  • 您需要一个Business Manager帐户。
    • 需要进行验证,并且必须签署数字合同。
  • 您需要将目标Facebook页面添加到该帐户。
  • 您需要创建一个Facebook应用程序,并将该应用程序也转移到相同的Business Manager帐户。
  • 该应用将必须经过Facebook的审核过程,因为需要以下权限:manage_pagespublish_pages
    • 重要提示,要使使用生成页面令牌发布的帖子对应用程序管理员以外的其他用户可见,则该应用程序必须已发布并得到批准。
    • 您仍可以在不提交审阅的情况下尝试使用该概念,但是帖子不会在公开场合显示。
  • 在业务管理器帐户中(仅在将您的应用和页面添加到该帐户之后),您需要创建一个称为系统用户的用户,并赋予该用户管理员角色(或权限)到目标Facebook页面。
    • 系统用户由Business Manager帐户拥有,并且不受特定用户的束缚。我目前的理解是,系统用户的一个主要用例是对Facebook的Graph API的编程访问(正是我们所需要的)。
  • 然后,对于该系统用户,您需要生成访问令牌(该令牌将永不过期)。系统将提示您选择哪个应用程序。然后,您将选择目标应用程序。
  • 然后,您将需要使用生成的应用令牌生成页面令牌,该令牌也将永不过期。 in this article将该过程描述为:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • 就是这样。

该令牌将永不过期,并且不会与特定的Facebook用户绑定,因此正是我们所需要的!

最后一部分是确保您的Facebook应用得到Facebook的批准。实际上,这是最重要的部分,因为如果人们看不到我们的帖子,那么整个过程就一文不值。

我想确定要依靠上述程序为我的客户构建一些东西,而不会被Facebook最终拒绝,因此,在事前(即,开始从事我的客户项目之前),我经历了创建页面,应用程序,业务经理帐户等的整个过程。我验证了我的业务。我将我的应用提交了审核。在我的要求中,我非常详细地说明了我的用例,并强调该应用程序是用于“自用”的(即该组织正在为自己而不是其他Facebook用户开发一个应用程序)。我在不到24小时的时间内得到了批准。

关于应用审核过程的其他一些注意事项:

  • 我必须为应用选择平台,所以我选择了网站
  • 我必须指出为什么该应用程序需要两个权限以及如何使用它们。
  • 我必须指出为什么审阅者无法登录我的应用并尝试(即因为该应用将由工作进程使用)。
  • 对于强制性的截屏视频,我仅使用curl实用程序在终端中介绍了手动操作(生成页面令牌并在Facebook页面上发帖)。我还展示了如何使用业务管理器将系统用户链接到页面并生成令牌,等等。
  • 同样,我对用例非常具体,我认为这很有帮助。

我希望这些信息对具有类似用例的人有用。

答案 3 :(得分:1)

非常感谢@redhotvengeance提供的分步指南。

过了一段时间,现在Facebook文档中有明确描述:

this question

  

扩展页面访问令牌

     

应用可以从页面管理员用户检索页面访问令牌   使用manage_pages权限进行身份验证。如果用户访问   用于检索此页面的令牌访问令牌是页面的短命   访问令牌也将是短暂的。

     

要获取更长寿的页面访问令牌,请交换用户访问权限   如上所述,对于长期存在的令牌,然后请求页面访问   令牌。生成的页面访问令牌将没有任何到期时间。

答案 4 :(得分:0)

您还可以在Facebook上的应用信息中心复制和过去。 步骤:

  1. 转到https://developers.facebook.com

  2. 在页面右上角选择您的应用 (pic of what it looks like)

  3. 点击左侧选项中的Messenger(它将自动进入设置)(pic of what it looks like)
  4. 转到&#34;令牌生成&#34;页面中的部分。选择要为其生成令牌的页面。 (pic of what that section looks like)
  5. 复制并过去您需要的页面令牌。
  6. 请记住,虽然理论上您的令牌不会过期,但它与您登录的Facebook帐户直接相关。因此,如果您更改了密码,或者从帐户和应用之间删除了权限,那么您的令牌将无法再有效。