Мне нужно войти в Facebook для большого веб-проекта, и я застрял. Мы используем Eclipse IDE с Java 1.6 и Spring. Далее используем Spring-Security для проверки. Я нашел Spring Social и вместе с ним Spring Social Facebook. Текущий выход для входа в систему: пользователь может ввести свои учетные данные и войти в систему с помощью кнопки входа или нажать кнопку facebook. После этого он будет перенаправлен на facebookAuthenticationFilter, который проверяет, нажимал ли он кнопку facebook или нет. Если он это сделал, facebookAuthenticationFilter сгенерирует перенаправление на вход в 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();
В отмеченной строке получаем Bad Request от сервера. Не знаю почему. И особенно часть с разбором параметра «код» кажется неприглядной и выглядит не очень хорошо. Разве нет лучшего способа сделать это?
Заранее благодарны за Вашу помощь.