这个话题似乎有点混乱,我很难得到一个明确的答案,所以这是我的问题......
我正在使用服务器端流来获取我的网络应用程序的访问令牌,我之前使用的是offline_access,现在正在折旧,所以我需要一种方法在以下情况下刷新令牌:
1)用户更改FB密码 2)令牌自然过期
我的应用程序将结果发布到用户FB墙,因此刷新需要由我们的服务器自动完成(无cookie或OAuth对话框)
我以为我可以尝试使用此处描述的新端点
http://developers.facebook.com/roadmap/offline-access-removal/
,使用以下代码片段(Java):
public static String refreshFBAccessToken(String existingAccessToken)
throws Exception{
//Currently not working
String refreshUrl = "https://graph.facebook.com/oauth/access_token?
client_id="+FacebookApp.appId+"
&client_secret="+FacebookApp.appSecret+"
&grant_type=fb_exchange_token
&fb_exchange_token="+existingAccessToken;
URL url = new URL(refreshUrl);
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(),
url.getQuery(), null);
String result = readURL(uri.toURL());
String[] resultSplited = result.split("&");
return resultSplited[0].split("=")[1];
}
但这似乎不起作用(我得到了响应400),当我重新阅读文档时,似乎这个端点仅用于使用客户端流程获得的令牌...
那么服务器端流程怎么样??
有人可以告诉我上述方法是否正确或有其他方式吗?
非常感谢
答案 0 :(得分:3)
根据我的理解,没有用于刷新令牌的服务器端流程。
刷新令牌调用需要包括用户身份验证过程的响应,这是一个短期令牌。
您需要将刷新令牌流程包含在用户登录流程中,或者如果这不适用于您的设置,则需要通过电子邮件向用户发送电子邮件,要求他们回来!
答案 1 :(得分:1)
我不懂java但语法非常像C#,所以我可以说,你做的一切都很正确。
但我怀疑这个函数readURL
做了什么?
如果它像php的get_file_contents()
一样工作(即如果它得到HTTP获取),我想这不是一种正确的方法。
根据我在google刷新令牌方法方面的经验,我认为您应该使用HTTP POST而不是HTTP GET来获取网址。