从 Facebook 获取长期访问令牌
Posted
技术标签:
【中文标题】从 Facebook 获取长期访问令牌【英文标题】:Get long live access token from Facebook 【发布时间】:2012-05-15 02:04:55 【问题描述】:据我了解,最近 Facebook 已决定删除 offline_access
权限,并引入了一个称为长寿命访问令牌的概念,最长可使用 60 天。有谁知道如何使用 Facebook javascript SDK 获取此访问令牌?
【问题讨论】:
【参考方案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。以上是关于从 Facebook 获取长期访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
通过Console App C#将照片发布到Facebook页面