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! –