0
我必须做一个大型网站项目的Facebook登录,我卡住了。 我们使用Eclipse IDE和Java 1.6和Spring。此外,我们使用Spring-Security进行验证。 我发现春季社交和它与春天社交Facebook。 登录的当前插座是: 用户可以输入他的凭证并通过登录按钮登录,或者他按下facebook按钮。之后,他将被重定向到facebookAuthenticationFilter,它会检查他是否按下facebook按钮。如果他这样做,FacebookAuthenticationFilter将生成重定向到Facebook登录。这看起来是这样的:春季安全链和Facebook使用春季社交
FacebookConnectionFactory connectionFactory = new FacebookConnectionFactory(APP_ID, APP_SECRET);
OAuth2Operations oauthOperations = connectionFactory.getOAuthOperations();
OAuth2Parameters params = new OAuth2Parameters();
params.setRedirectUri(REDIRECT_URI);
params.setScope("user_about_me,user_birthday,user_likes,user_status");
String authorizeUrl = oauthOperations.buildAuthorizeUrl(GrantType.AUTHORIZATION_CODE, params);
response.sendRedirect(authorizeUrl);
我们寻找的“代码”参数,并在接收到的过滤器,我们做
String authURL = "https://graph.facebook.com/oauth/access_token?client_id="
+ APP_ID
+ "&redirect_uri="
+ REDIRECT_URI
+ "&client_secret="
+ APP_SECRET + "&code=" + code;
// Facebook.getAuthURL(code);
URL url = new URL(authURL);
String result = readURL(url);
String authorizationCode = null;
Integer expires = null;
String[] pairs = result.split("&");
for (String pair : pairs) {
String[] kv = pair.split("=");
if (kv.length != 2) {
logger.error("Unexpected auth response");
} else {
if (kv[0].equals("access_token")) {
authorizationCode = kv[1];
}
if (kv[0].equals("expires")) {
expires = Integer.valueOf(kv[1]);
}
} // if-else kv.length!=2
} // for
// upon receiving the callback from the provider:
AccessGrant accessGrant = null;
try {
FacebookConnectionFactory connectionFactory = new FacebookConnectionFactory(APP_ID, APP_SECRET);
OAuth2Operations oauthOperations = connectionFactory.getOAuthOperations();
// nächstes produziert einen Fehler: 400 - BAD REQUEST
accessGrant = oauthOperations.exchangeForAccess(authorizationCode,REDIRECT_URI, null);
Connection<Facebook> connection = connectionFactory.createConnection(accessGrant);
Facebook facebook = connection.getApi();
在标记线之后,我们得到来自服务器的错误的请求。不知道为什么。 特别是解析参数“代码”的部分会感到恶心并且看起来不太好。没有更好的方法来做到这一点吗?
感谢您的帮助提前。
注意authorizationCode,这可能包括clientId! –