【问题标题】:Get long live access token from Facebook从 Facebook 获取长期访问令牌
【发布时间】:2012-05-15 02:04:55
【问题描述】:

据我了解,最近 Facebook 已决定删除 offline_access 权限,并引入了一个称为长寿命访问令牌的概念,最长可使用 60 天。有谁知道如何使用 Facebook JavaScript SDK 获取此访问令牌?

【问题讨论】:

    标签: facebook-graph-api


    【解决方案1】:

    有一种方法可以将其延长至 60 天。此处描述:https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/Scenario 4: Client-side OAuth and Extending Access_Token Expiration Time through New 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 
    

    【讨论】:

    • 当我当前的访问令牌在 60 天后每次到期时,我是否需要交换我当前的 access_token 以获得新的访问令牌。现在,当我将 offline_access 作为 scop 参数传递时,似乎它没有考虑它,只是我的访问令牌在几个小时内就失效了。你能解释一下我是如何通过 facebook JavaScript sdk 获得长期访问令牌的吗?是否有任何设置或特殊参数需要我一起发送。
    • 您无法使用 js sdk 获得 60 天访问令牌。您只能在先收到短期访问令牌后将其延长至 60 天。
    • 有没有办法在没有用户交互的情况下再次延长这 60 天?
    • 请注意,根据developers.facebook.com/docs/facebook-login/access-tokens,由于此请求发送 APP_SECRET(并检索长期用户令牌),因此不应在客户端完成,而应在服务器上完成。
    • @Excaliber:将 APP_SECRET 作为获取参数发送仍然有点风险。它在路线中可见,并且可以存储在访问日志中。作为 post 参数发送会更好。由于这是一个 https 调用,因此它将被加密。由于同源/跨域规则,也许 facebook 以这种方式实现它。如果他们把它放在他们的服务器端 SDK 中会很好。
    【解决方案2】:

    由于 Facebook 中的一个错误,一些用户必须在 Facebook 发布长期令牌之前取消对应用的授权。

    【讨论】:

    • 已确认。在我的头撞到屏幕上 7 小时后,从我的帐户中删除了该应用程序,并返回了长寿令牌。
    • 即使客户端密码正确,这是否是“验证客户端密码错误”错误?
    【解决方案3】:

    我刚刚使用“axios”进行了 Facebook Graph API 调用。您可以从 App Dashboard 中找到 client_id 和 client_secret。

    getLongLiveToken = () => {
        window.FB.getLoginStatus(function(response) {
            if (response.status === 'connected') {
                let userAccessToken = response.authResponse.accessToken;
                axios.get(`https://graph.facebook.com/oauth/access_token?client_id=${clientId}&client_secret=${clientSecret}&grant_type=fb_exchange_token&fb_exchange_token=${userAccessToken}`)
                .then((response) => {
                    console.log("Long Live Access Token");
                    console.log(response.data.access_token);
                 });
               }
           });
        }
    <button onClick={ () => this.getLongLiveToken() } >Long Live Token</button>
    

    【讨论】:

      【解决方案4】:

      将函数添加到 javascript 中,并提供以下详细信息:我希望它对你有用。

      function getLongLiveToken(data){
      
              FB.api('oauth/access_token', {
                  client_id: data.client_id, // FB_APP_ID
                  client_secret: data.secret, // FB_APP_SECRET
                  grant_type: 'fb_exchange_token',
                  fb_exchange_token: data.access_token // USER_TOKEN
              }, function (res) {
                  if(!res || res.error) {
                      console.log(!res ? 'error occurred' : res.error);
                  }else{
                      var accessToken = res.access_token;
                      if(typeof accessToken != 'undefined'){
                      }
                  }
              });
          }
      

      【讨论】:

      • 不要从客户端进行调用,将短令牌发送到服务器并在后端使用此类东西,因为它包含应用程序机密。
      • 你能告诉我吗!!!您更喜欢哪种编程语言。
      • 后端随便用什么,我个人用python。
      猜你喜欢
      • 2014-10-08
      • 2014-02-27
      • 2018-07-17
      • 2012-03-15
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      相关资源
      最近更新 更多