14

iPhoneアプリのユーザーが実際にFacebookアプリにログインしていることを確認する必要があります。アクセストークンを使用してユーザーIDを取得することで、ユーザーIDを確認できます。

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

私が予測するセキュリティの問題は、有効なアクセストークンを送信でき、ユーザーIDが返されることです。このトークンが特定のアプリ用であることも検証する必要があります。このリクエストでアプリケーションIDを返して、それを検証する方法はありますか?

4

4 に答える 4

21

Facebookは、アクセストークンのデバッグをサポートするようになりました。接続にGET要求を発行することにより、特定のアクセストークンに関連する情報を取得できますdebug_token。何かのようなもの:

GET /debug_token?
     input_token={input-token}&
     access_token={access-token}

ここで、 input-token:情報を取得するアクセストークンとaccess-token:アプリのアクセストークンまたはアプリの開発者からの有効なユーザーアクセストークン

そして、これは次の情報を返します:

{
        "data": {
            "app_id": 000000000000000, 
            "application": "Social Cafe", 
            "expires_at": 1352419328, 
            "is_valid": true, 
            "issued_at": 1347235328, 
            "scopes": [
                "email", 
                "publish_actions"
            ], 
            "user_id": 1207059
        }
    }

詳細については、「トークンとデバッグに関する情報の取得」リファレンスを参照してください。

于 2013-12-30T17:25:23.483 に答える
14

はい。これを照会できます:

https://graph.facebook.com/app?access_token=TOKEN

アクセストークンを作成したアプリの名前、ID、およびいくつかの統計情報が返されます。

于 2013-01-27T03:09:29.590 に答える
1

これがPython3での私の実装であり、単一のFacebookバッチリクエストを実装しています。これにより、ユーザーのaccess_tokenに関連付けられているAPPデータとUSERデータの両方が1回の呼び出しで取得されます。

#Build the batch, and urlencode it
batchRequest = '[{"method":"GET","relative_url":"me"}, {"method":"GET","relative_url":"app"}]'
batchRequestEncoded = urllib.parse.quote_plus(batchRequest)

#Prepare the batch and access_token params
dataParams = 'access_token=%s&batch=%s' % (fb_access_token, batchRequestEncoded)
dataParamsEncoded = dataParams.encode()
fbURL = 'https://graph.facebook.com/'

#This will POST the request
response = urllib.request.urlopen(fbURL, dataParamsEncoded)

#Get the results
data = response.read()
data = json.loads(data.decode("utf-8"))

私が書いたエンコーディング呼び出しのいくつかを実装するためのよりPython的な方法があるかもしれませんが、私は自分にとって正確に機能するものを示したかっただけです。

于 2014-11-08T16:23:52.677 に答える
0

appsecret_proofAPI呼び出しで使用できます。

公式ドキュメントから:

アクセストークンは移植可能です。FacebookのSDKによってクライアントで生成されたアクセストークンを取得し、それをサーバーに送信してから、クライアントに代わってそのサーバーから呼び出しを行うことができます。

これを防ぐには、サーバーからのすべてのAPI呼び出しにappsecret_proofパラメーターを追加し、すべての呼び出しで証明を要求するように設定を有効にします。これにより、悪意のあるユーザーがサーバーからのアクセストークンを使用してAPI呼び出しを行うのを防ぐことができます。

例:

https://graph.facebook.com/app?access_token=TOKEN&appsecret_proof=<app secret proof>

PHPの場合:

$endpoint = sprintf(
    'https://graph.facebook.com/app?access_token=%s&appsecret_proof=%s',
    urlencode($accessToken),
    urlencode(
        hash_hmac('sha256', $accessToken, $appSecret)
    )
);

これで、取得した応答を認証に使用できると信頼できます。

于 2017-12-16T09:37:23.020 に答える