如何获取未过期的页面访问令牌?

时间:2012-10-03 10:05:45

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

我想知道是否可以使用永不过期的访问令牌发布到我的页面

现在我获得了访问令牌:

https://graph.facebook.com/me/accounts

我有publish_streammanage_pages权限,但使用Access Token Debugger我看到令牌在约1小时后到期。有没有办法永不过期?

5 个答案:

答案 0 :(得分:17)

请参阅facebook developers

  

通过使用长期存在的用户访问令牌,查询[用户   ID] / accounts endpoint现在将提供页面访问权限令牌   对于用户管理的页面,过期

因此,您必须通过服务器端呼叫将长期的短期令牌换成长期令牌:

https://graph.facebook.com/oauth/access_token?
client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN 

然后使用该长期令牌查询我/帐户。绝对适用于我们,即调试器显示:'过期:从不'


编辑 - 我们的流程

所以,我们所做的是:

  • 首先client side authentication使用我们的应用,我们得到一个"代码"在用户接受所请求的权限并将其帐户与我们的应用程序连接后返回

    https://www.facebook.com/dialog/oauth?     client_id = YOUR_APP_ID& redirect_uri = YOUR_REDIRECT_URI& scope = COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES& response_type = code

  • 现在,在我们的服务器应用程序中,我们使用server side authentication来交换访问令牌的代码:

    https://graph.facebook.com/oauth/access_token?     client_id = YOUR_APP_ID& redirect_uri = YOUR_REDIRECT_URI& client_secret = YOUR_APP_SECRET& code = CODE_GENERATED_BY_FACEBOOK

  • 通过此access_token,我们按照上述

  • 进行服务器端交换
  • 现在我们要求我/帐户,结果access_token始终有效

希望有所帮助

答案 1 :(得分:4)

我简化了Pete的回答,并添加了获取非过期页面访问令牌的步骤:

  1. 访问以下网址,并在浏览器的地址栏中记下返回的访问令牌:

      

    https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=REDIRECT_URI&scope=manage_pages,publish_stream&response_type=token

  2. 访问以下网址,并在返回的数据中找到所需网页的名称并记下访问令牌:

      

    https://graph.facebook.com/me/accounts?access_token=ACCESS_TOKEN_RETURNED_FROM_STEP_1

  3. 访问以下网址并记下返回的访问令牌:

      

    https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=PAGES_ACCESS_TOKEN_FROM_STEP_2

  4. 使用Access Token Debugger确保您的访问令牌的个人资料ID与所需网页的ID匹配,且永不过期

答案 2 :(得分:2)

截至2016年,有一种更简单的方法:

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

  2. 从右上角的下拉列表中选择您的应用

  3. 点击应用程序下拉列表下方的“获取访问令牌”按钮 在右侧

  4. 在下拉列表中选择您要获取访问令牌的页面。 如果您没有看到列出的页面,那么您需要确认 您已设置页面的管理员角色。你可能也必须这样做 点击下拉列表中的“获取页面访问令牌”,然后点击您的 下次单击“获取访问权限”时,页面将显示在下拉列表中 令牌“按钮。

  5. 点击“访问令牌”输入字段中的蓝色感叹号图标

  6. 单击“打开访问令牌工具”按钮 弹出窗口的右下角

  7. 点击“扩展访问令牌”按钮以获取从不的令牌 到期

  8. 本文的原始信息:https://www.rocketmarketinginc.com/blog/get-never-expiring-facebook-page-access-token/

答案 3 :(得分:1)

好的,所以花了一周时间研究,但这是我的解决方案。 在https://developers.facebook.com/tools/explorer/中确保您将manage_page作为access_token的一部分。之后,将此代码与您的应用ID,密码和重定向一起使用:

<?php
   app_id = "APP_ID";
   $app_secret = "APP_SECERET";
   $post_login_url = "REDIRECT_URL";


   $code = $_REQUEST['code'];

   //Obtain the access_token with publish_stream permission 
   if(empty($code)){ 
      $dialog_url= "http://www.facebook.com/dialog/oauth?"
       . "client_id=" .  $app_id 
       . "&redirect_uri=" . urlencode( $post_login_url)
       .  "&COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES";
      echo("<script>top.location.href='" . $dialog_url 
      . "'</script>");
     }
    else {


      $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=". urlencode($post_login_url)
       . "&client_secret=" . $app_secret
       . "&code=" . $code;
      $response = file_get_contents($token_url);
      $params = null;
      parse_str($response, $params);
      $access_token = $params['access_token'];
      echo 'access token: ' . $access_token.'<br>';

        if($access_token){


          $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=". urlencode($post_login_url)
       . "&client_secret=" . $app_secret
       .'&grant_type=fb_exchange_token'
       . "&fb_exchange_token=" . $access_token;
       $response = file_get_contents($token_url);
       $access_token = $params['access_token'];
       echo 'new access token: '.$access_token;

        }
    }*/

?>

之后复制“新访问令牌”并返回https://developers.facebook.com/tools/explorer/当您通过新访问令牌到达访问令牌字段时。 然后点击提交。在节点中,您将看到+ _ ___ 点击此处,然后向下滚动到帐户并点击该帐户。找到您需要访问令牌的页面,然后将其复制并粘贴到访问密钥字段中。单击调试,您将看到它永远不会过期。保存该令牌,只要您不重置您的应用秘密,它就会保持有效。

答案 4 :(得分:0)

你可以使用facebook下面的api将令牌生命刷新到60天,当令牌即将到期时,再用60天的时间再次调用相同的api,将其生命从那个时间点恢复到60天 令牌过期出现在expires参数中,其值以秒为单位

将CLIENT_ID和CLIENT_SECRET替换为其实际值

https://graph.facebook.com/oauth/access_token?client_id=&安培; client_secret =安培; grant_type = fb_exchange_token&安培; fb_exchange_token =

在ACCESS_TOKEN中,输入实际的令牌值而不附加“access_token =”