0

私は大きなウェブプロジェクトのためにフェイスブックのログインをしなければなりません、そして私は立ち往生しています。Java1.6およびSpringでEclipseIDEを使用しています。さらに、検証にはSpring-Securityを使用します。私はSpringSocialを見つけ、それとともにSpringSocialFacebookを見つけました。サインインの現在のアウトレットは次のとおりです。ユーザーは自分の資格情報を入力してログインボタンからログインするか、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();

マークされた行で、サーバーから不正なリクエストを受け取ります。理由はわかりません。特に、パラメータ「コード」の解析を含む部分は、不快に感じ、見栄えがよくありません。それを行うためのより良い方法はありませんか?

よろしくお願いします。

4

1 に答える 1

1

authUrlを呼び出す代わりに、コールバックURLに渡されるコードを使用して、次のようにaccessGrantを取得する必要があります。

accessGrant = connectionFactory.getOAuthOperations().exchangeForAccess(code, REDIRECT_URI, null)

そのaccessGrantを使用すると、すでに行っている接続を確立できるはずです。

于 2011-12-14T17:32:13.873 に答える