没有用户登录的Facebook页面提要

时间:2014-07-30 15:15:32

标签: facebook spring facebook-graph-api spring-social spring-social-facebook

也许你可以帮我解决问题。我想使用Spring Social在Facebook页面上获取所有公开发布的帖子。

我不需要与某个用户或某些东西进行OAuth身份验证,因为我不想以某人的名义发布,评论或任何其他人。

仍然,Facebook要求在发出请求时传递访问令牌。所以我正在执行以下操作来获取所有公开帖子。

现在我的问题是:是否有更简单,更简洁的方法来实现这一点,或者Spring Social是否仅支持完整的用户身份验证OAuth舞蹈而不是这种相当简单的方式?

public List<Post> fetchFacebookPosts() {

    String accessTokenUrlString = String.format("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=%s&client_secret=%s&redirect_url=%s", getFacebookAppId(), getFacebookAppSecret(), "http://www.return.url");

    String token = "";

    try {
        // HTTPURLConnection stuff omitted
        // returns: accessToken=xxxx|xxxxxxxxxxxxx

        token = response.toString().substring(response.toString().indexOf("=")+1);

    } catch (IOException e) {
        // ...
    }

    FacebookTemplate facebookTemplate = new FacebookTemplate(token);
    return facebookTemplate.feedOperations().getFeed("12345678");
}

3 个答案:

答案 0 :(得分:2)

要获取Facebook页面的Feed,您甚至可以使用最基本的访问令牌App Access Token,而无需用户登录/授权。

String appAccessToken = APP-ID + '|' + APP_SECRET;

阅读这些文章中有关不同访问令牌的更多信息:

答案 1 :(得分:1)

除了OAuth 2授权代码授权(完整的用户授权令牌流),Spring Social的OAuth2Template还支持密码授予和客户端凭据授权。

密码授予需要您获取用户的凭据,但您无需通过整个OAuth流程。通常建议密码授权仅用于重定向流程笨拙或不可能的本机应用程序。尽管如此,Facebook(据我所知)并不支持密码授予,因此该选项已不在考虑范围内。

Facebook 通过OAuth2Template的authenticateClient()方法支持客户端凭据授予。在这种情况下,您可以交换应用程序的凭据(由Facebook提供给您)以获取访问令牌。但请注意,您获得的令牌仅限于用于不以用户为中心的请求。

通常,Facebook的大部分API都需要一个用户令牌......您必须通过完整的授权流程获得该令牌。这不是Spring Social的限制......它是由Facebook制定的严格的安全限制。

答案 2 :(得分:0)

在这种情况下,文档[1]非常清楚。你需要一个access_token。要求access_token并不意味着它仅用于发布内容。这是Facebook的要求,Spring Social可以做很多事情。

[1] https://developers.facebook.com/docs/graph-api/reference/v2.0/page/feed/