Spring社交Facebook - 交换令牌

时间:2018-05-17 10:42:46

标签: spring-boot spring-social spring-social-facebook

我对sprig / spring-social相当新鲜。我试图从我的spring boot(v1.4)应用程序执行对Facebook API的请求,以交换使用autT代码(我用我的前端应用程序获取)以获取accessToken。这是我的方式

FacebookConnectionFactory facebookConnectionFactory = new FacebookConnectionFactory(fbAppId, fbAppSecret);
AccessGrant accessGrant = facebookConnectionFactory.getOAuthOperations()
            .exchangeForAccess(authCode, redirectUri, null);

因此,我得到的AccessGrant accessToken等于null。尝试调试代码转换流程我可以看到正确的authToken实际上是在FacebookOAuth2Template::postForAccessGrant()中收到的,但由于某种原因它转换为MultiValueMap<String, String>,即:

protected AccessGrant postForAccessGrant(String accessTokenUrl, MultiValueMap<String, String> parameters) {
    MultiValueMap<String, String> response = getRestTemplate().postForObject(accessTokenUrl, parameters, MultiValueMap.class);
    String expires = response.getFirst("expires");
    return new AccessGrant(response.getFirst("access_token"), null, null, expires != null ? Long.valueOf(expires) : null);
}

我的response MultiValueMap因此包含一个条目,其中一个键是facebook authToken响应。显然,所有后续的response.getFirst()调用都不会返回任何内容

我非常确定我在这里遗漏了一些明显的东西,但我仍然无法理解为什么authToken响应会像它一样转换为MutliValueMap

1 个答案:

答案 0 :(得分:0)

似乎旧版本的spring-social-facebook依赖项(1.1.0)已被纳入项目并用于通信。升级到2.x版本解决了问题