1

iOSとAndroidアプリケーションを提供する安らかなAPI(PHP)を構築しています。安心なAPI - Facebookのアクセストークンが有効で、APPの使用を許可されているかどうかを確認してください。

欠陥は、次のようなものです:facebookで

  • クライアント(IOSやAndroid)ログインとaccess_tokenは、アプリケーション
  • の使用を許可されている場合
  • を確認し、安らかなAPIにaccess_tokenはを送信します
  • トークンが有効な場合、グラフからユーザーデータを取得します。
  • アカウントをマージし、さまざまなクエリのトークンを生成します。

私のAPPに属していないランダムトークンを取得しないようにするため、トークンが有効かどうかを確認するためのテストコールを行いたいと思いますか?

私はすでに多くの似たような質問があるかもしれないと知っていますが、どれも本当に私に正しい回答を与えていないし、実際にはFacebookのグラフの経験はありません。

私はこの解決策を見つけた:

https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=SECRET_APP_ID&grant_type=fb_exchange_token&fb_exchange_token=ACCESS_TOKEN 

これは何とか動作します...それはどうか、私にエラー、またはアクセストークン(文字列形式ではないJSON)を得、これはするための最良の方法である場合、私はわかりませんテストかどうか

注:私はまだ開発の初期段階にありますが、私の流れに関する提案があれば教えてください。私は間違ったやり方をするかもしれませんか?

+1

"ランダム"トークンはとにかく動作しません。あなたが持っているアクセストークンを使用してユーザーの詳細を要求するだけです。誰かがそれを "偽造"しようとしたために有効でない場合は、APIの応答があなたに伝えます。 //ドキュメントにはAPIリクエストのセキュリティに関する章があり、それもチェックしてください:https://developers.facebook.com/docs/graph-api/securing-requests/ – CBroe

+0

Brilliant!今私はサーバーコールのためのappsecret_proofを追加し、それは完全に動作します。私はランダムトークンがこれ以上働くとは思わない:Dあなたは答えとして私はそれを受け入れることができるあなたのコメントを追加できますか?ありがとう:) –

答えて

1

「ランダム」トークンはとにかく動作しません。 (Facebookによって発行されたトークンは暗号化されているため、APIはトークンが本物であるかどうか、あるいは単に「ランダム」であるかどうかを知ることができます。 )あなたが持っているアクセストークンを使用してユーザーの詳細を要求するだけです。誰かが "偽造"しようとしたために有効でない場合は、APIの応答があなたに伝えます。 https://developers.facebook.com/docs/graph-api/securing-requests私のアプリケーション(以下の説明とコード)のために働く何

3

...

$fb = new Facebook\Facebook([ 
'app_id' => 'XXXXXXX', 
    'app_secret' => 'XXXXXXX', 
    'default_graph_version' => 'v2.5', 
]); 

// My app pulls users' access tokens & page ID from a database here and stores in $fb_access_token & $fb_page_id variables 
$fb_access_token = 'YOU OR YOUR USERS ACCESS TOKEN GOES HERE'; 
$fb_page_id = 'ID OF FACEBOOK PAGE OR USER'; 

$fb->setDefaultAccessToken($fb_access_token); 

// CHECK IF ACCESS TOKEN SITLL WORKS 
try{ 
$page = $fb->get('/'.$fb_page_id.'?fields=id', $fb_access_token); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
echo 'Graph returned an error: ' . $e->getMessage(); 
$graphError = 'Yes'; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
$sdkError = 'Yes'; 
} 

// IF ACCESS TOKEN STILL WORKS...CONTINUE WITH SCRIPT. THIS PREVENTS ACCESS TOKEN FAILURE FROM BREAKING SCRIPT. 
if(!isset($graphError) && !isset($sdkError)){ 
// CONTINUE WITH SCRIPT 
} 

説明:

ドキュメントは行くとしてもそれをチェックアウトし、APIリクエストの確保に関する章を持っています問題のアクセストークンを取得していて、Facebook APIへのGETリクエストを作成しようとしています。エラーがない場合は、スクリプトの残りの部分だけを続行してください。

最後にELSEステートメントを追加して、アプリが何をしているかに応じて、アカウント/アクセストークンを再認証できるページにユーザーをリダイレクトすることもできます。

私のアプリは、WHILEのカップルは、このソリューションの前にユーザーの私のデータベースを通過し、特定の列/セルの値に応じて、それが彼らのために自分のFacebookページに投稿...

にループ使用しています...Loopが無効なアクセストークンを見つけた場合、ループは「破損」し、「認証されていないユーザー」に続く行のスクリプトを実行しませんでした。

これが誰かを助けることを願っています!

関連する問題