1

好吧,这个话题似乎有点混乱,我正在努力得到一个明确的答案,所以这是我的问题......

我正在使用服务器端流程来获取我的 Web 应用程序的访问令牌,我之前使用了 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),当我重新阅读文档时,似乎这个端点仅用于使用客户端流获得的令牌......

那么服务器端流程呢......?

有人可以告诉我上述方法是否正确还是有其他方法?

非常感谢

4

2 回答 2

3

据我了解,刷新令牌没有服务器端流程。

刷新令牌调用需要包含用户身份验证过程的响应,这是一个短暂的令牌。

您需要将刷新令牌过程作为用户登录流程的一部分包含在内,或者如果这对您的设置不起作用,您需要向用户发送电子邮件,要求他们回来!

于 2012-04-11T12:26:48.177 回答
1

我不懂java,但语法很像C#,所以我可以说,你做的一切都是对的。

但我怀疑这个功能readURL是做什么的?

如果它像get_file_contents()php 一样工作(即,如果它执行 HTTP 获取),我想那不是正确的做法。

根据我对谷歌刷新令牌方法的经验,我认为你应该对给定的 url 执行 HTTP POST 而不是 HTTP GET。

于 2012-04-06T20:40:26.290 回答