1

SSOログインにFacebookOAuthを使用するPhonegapベースのアプリケーションを開発しています。サーバー側でFB.loginjavascript応答を検証する方法は?Facebookモバイルからアプリへのリダイレクトが成功した後、userIdとaccessTokenを取得します。サーバー上のユーザーのアクセスを取得するには、accesTokenをチェックするだけで十分ですか?

https://graph.facebook.com/me?fields=id&access_token=...

私の問題は、モバイルとWebでのJSとPHPの組み合わせです。ユーザーはすでにWeb経由で接続しているため、モバイルでFB.loginを使用し(Javascript)、正常に戻ります(クライアント)。これで、データベースのFB IDを確認して、AJAXリクエストを介してユーザー資格情報を読み込むことができます。AJAXリクエストを安全にする方法。プロトタイプは、有効なFBを通過するすべての人にログインします。これは、私のDBにも存在します。したがって、システムはFB(サーバー)で再検証せずにセッションを取得するために開いています。私のアイデアは、accessTokenが有効かどうかを確認することでしたが、これで十分かどうかはわかりません...そうではないと思います...おそらくIPも確認しますか?

4

1 に答える 1

0

accessTokenシームの代わりにSignedRequestを使用して、アプリシークレットを使用するPHPソリューションなどの私のニーズに合った正しい選択をしてください。

private function check_signed_request($signed_request) {

    $secret = Semods_Utils::getSetting('socialdna.facebook_secret','');
    list($encoded_sig, $payload) = explode('.', $signed_request, 2);

    // decode the data
    $sig = $this->base64_url_decode($encoded_sig);
    $data = json_decode($this->base64_url_decode($payload), true);

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
        throw new Exception('Unknown algorithm. Expected HMAC-SHA256');
    }

    // Adding the verification of the signed_request below
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
    if ($sig !== $expected_sig) {
        throw new Exception('Bad Signed JSON signature!');            
    }

    return true;
}

private function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_', '+/'));
}

参照:https ://developers.facebook.com/docs/howtos/login/signed-request/

問題signed_request を受信しませんでした。これらは未定義です。

response.authResponse.signed_request
response.authResponse.signedRequest

これには「...」しか含まれていません

response.authResponse.sig

誰かアイデア?

編集 OK.sigシームは私のプラグインによってのみ提供され、ハードコーディングされています:修正はそこにあるはずですhttps://github.com/davejohnson/phonegap-plugin-facebook-connect

しかし報告された: https ://github.com/davejohnson/phonegap-plugin-facebook-connect/issues/245

于 2013-02-03T22:02:16.047 に答える