任何人都可以告诉我如何在spring social
的帮助下获得社交网站的长期访问令牌。如果可能,请提供代码段。我使用的是spring 1.1.0
spring facebook
,linkedIn
和twitter
API。
答案 0 :(得分:6)
对于使用OAuth 1.0a的Twitter,令牌不会过期。所以你应该得到一个几乎永远持续的令牌(只要用户不撤销它)。
对于Facebook来说,获得永远存在的令牌是不可能的(不管怎样)。您唯一的选择是获取令牌并尽可能使用它。令牌过期后,您必须再次通过授权流程以获取新令牌。好消息是Spring Social提供了ReconnectFilter来帮助您。请参阅Spring Social Showcase示例(https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase),特别是SocialConfig.java
和WebMvcConfig.java
,了解如何设置ReconnectFilter
。
我的记忆在LinkedIn上有点模糊,但我记得LinkedIn以与Facebook大致相同的方式处理过期的令牌(也就是说,你必须重新授权以获得新的令牌)。因此,ReconnectFilter
也可以为您提供帮助。
请注意,上面针对FB和LI描述的行为是而不是符合OAuth 2规范。根据规范,刷新令牌与访问令牌一起被授予,并且可以在原件到期时用于获得新的访问令牌。 FB和LI没有实现规范的刷新令牌部分。我不知道究竟是为什么,但我怀疑它是因为它更安全。如果客户端必须通过授权流重定向用户以获取新令牌,则表示用户必须主动使用该应用程序并成为令牌续订的参与者。除了初始授权流程之外,按照规范的方法并不需要用户参与 - 即使用户再也不使用该应用程序,应用程序也可以永久续订令牌。
答案 1 :(得分:4)
似乎没有任何特殊功能准备将短命令牌交换为长寿命令牌。以下是适用于我的代码:
private static final String CLIENT_ID = "client_id";
private static final String APP_SECRET = "app_secret";
private static final String GRAPH_API_URL = "https://graph.facebook.com/oauth/access_token";
private static final String FB_EXCHANGE_TOKEN1 = "fb_exchange_token";
private static final String FB_EXCHANGE_TOKEN = "fb_exchange_token";
private static final String CLIENT_SECRET = "client_secret";
private static final String GRANT_TYPE = "grant_type";
(...)
public void execute(LoginFlow message) {
URI build = UriBuilder
.fromPath(GRAPH_API_URL)
.queryParam(CLIENT_ID, mClientId)
.queryParam(GRANT_TYPE, FB_EXCHANGE_TOKEN1)
.queryParam(CLIENT_SECRET, mAppSecret)
.queryParam(FB_EXCHANGE_TOKEN, message.getAccessToken())
.build();
String url = build.toString();
Facebook facebook = new FacebookTemplate(message.getAccessToken());
ResponseEntity<String> exchange = facebook.restOperations()
.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, String.class);
String response = exchange.getBody();
String longTermToken = Utils.extractToken(response);
(...)
}
答案 2 :(得分:0)
没有。在Facebook开发者网站上,他们为长期访问令牌提供了此选项:(输入APP_ID
,APP_SECRET
和EXISTING_ACCESS_TOKEN
的值
graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN
如果我们提供短期或正常的访问令牌,我们将获得一个长期访问令牌。