服务器端OAuth Facebook令牌刷新

3
我有一个ColdFusion网页,每隔x分钟就会被服务器刷新一次。该脚本检查各种信息源(Facebook、YouTube和内部新闻项),并按时间顺序构建合并的信息流。Facebook部分只是从我们的Facebook粉丝页面获取帖子数据。当我从我们的帐户授权我的应用程序时,我可以使用提供的OAuth令牌来实现这一点。
令牌每隔几个月就会过期。它的持续时间相当长,我已经读到没有自动授权应用程序的方法。然而,我一直在阅读关于这些"refresh token"的东西,但对它们的工作方式无法清楚地理解。
我希望我的脚本尝试从Facebook获取JSON数据,如果令牌每隔一段时间过期,则重新请求它,但显然只是再次访问graphs.facebook.com/oauth/authorize链接是不起作用的,因为你需要登录才能授权某些东西。
有没有办法我可以在服务器端内部重新授权或刷新我的令牌?这个Facebook应用程序、网站和Facebook用户都是完全内部的。以前有一个Facebook页面的RSS feed,但是Facebook一直在更改东西,我不再看到它了。
我真正需要的只是来自我的Facebook公司页面的时间线/信息流数据。
任何解决方案或建议都将是有帮助的。
答案:这就是我最终用来基于内容获取数据的方法。下面获取令牌,然后使用令牌获取feed数据并将其放入一个struct中。它可能不是最简洁的方法,但它起作用。
<cfhttp url="https://graph.facebook.com/oauth/access_token?client_id=[CLIENTID]&client_secret=[CLIENTSECRET]&grant_type=client_credentials&redirect_uri=[URL] "   
        result="AccessHTTP" />
<cfset token = replace(AccessHTTP.Filecontent,"access_token=", "", "ALL")>

<cfhttp result="result" url="https://graph.facebook.com/[USERNAME]/posts?access_token=#token#" ></cfhttp>
<cfset Facebook = deserializeJSON(result.filecontent).data />
1个回答

0

每次我的页面加载时,我只是获取令牌。

<cfhttp url="https://graph.facebook.com/oauth/access_token?client_id=your_client_id&client_secret=your_secret&grant_type=client_credentials" result="ThisHTTP" /> <cfset this.access_token = '#replace(ThisHTTP.Filecontent,"access_token=", "", "ALL")#'>

///在需要时使用#this.access_token#运行您的代码。///


那么使用客户端密钥每次都可以获取令牌吗?我只是在使用:https://graph.facebook.com/oauth/authorize?type=user_agent&client_id=YOUR_CLIENT_ID&redirect_uri=REDIRECT_URL&scope=offline_access我认为Facebook的文档很糟糕,我从未看到过您上面列出的格式。我将不得不尝试一下。 - Leeish
它强制我也添加了redirect_uri,因为oAuth一直给我一个错误,说它需要它,但是在添加后它运行得很好。我将把答案添加到原始帖子中,以便它在那里。 - Leeish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接