-2

常に同じであるFacebookユーザーの一意のIDコードが必要なので、Facebookを介してさらにユーザーログインできるように、FBユーザーIDと一緒にWebサイトデータベースに保存できます。残念ながら、authResponseには一時的なIDしか含まれていません。

authResponse: {
   accessToken: '...', // expire
   expiresIn:'...',
   signedRequest:'...', // expire
   userID:'...'
}

FB userIDだけでユーザーにログインすることはできません...javascriptを介してphpにauthResponse情報を送信する必要があるため、安全性が低すぎます。(PHP SDKは私のWebスペースでは機能しません[rootアクセスなし])。

解決策はありますか?または、PHP SDKを使用せずにFacebookユーザーを自分のWebサイトにログイン/認証する別の方法はありますか?

手伝ってくれてありがとう!

編集:
私の質問を送信した後、私はこの同様の投稿を見つけました:FacebookのJavascriptSDKを介してユーザーを安全に承認する方法

質問者は、FacebookからCookieを介して提供される暗号化された情報を介して、次の手順でユーザーを認証する方法について言及しました。
「Facebook経由の登録」の部分で行ったように、このCookie情報を復号化してみます。私のappIDとsecurityIDを使用します。

4

1 に答える 1

1

暗号化されたCookie情報を介してFacebookユーザーを認証する方法は正常に機能します。

ここにコードがあります:

// PHP script which get visitor's FB ID over $_GET['fbid'] (for example through ajax or javascript redirect)
if(isset($_GET['fbid'])) {
    define('FACEBOOK_APP_ID', 'YOUR APP ID');
    define('FACEBOOK_SECRET', 'YOUR SECRET ID');

    function parse_signed_request($signed_request, $secret) {
        list($encoded_sig, $payload) = explode('.', $signed_request, 2);

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

        if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
                error_log('Unknown algorithm. Expected HMAC-SHA256');
                return null;
        }

        // check sig
        $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
        if ($sig !== $expected_sig) {
            error_log('Bad Signed JSON signature!');
            return null;
        }

        return $data;
    }

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

    // Check if Facebooks cookie is set
    if(isset($_COOKIE['fbsr_' . FACEBOOK_APP_ID])) {
        $response = parse_signed_request($_COOKIE['fbsr_' . FACEBOOK_APP_ID], FACEBOOK_SECRET);

        // Check if userID sent by visitor is the same like decrypted userID given from cookie
        if($response['user_id'] == $_GET['fbid']) {
            // Login script here
            echo "Successfully authenticated!";
        } else {
            // userID sent by visitor is modified
            echo "Please don't use others FB ID!";
        }
    } else {
        // Facebook cookie is not set
        echo "Please allow cookies!";
    }

}
于 2013-01-07T14:35:13.950 に答える