2011-11-28 5 views
0

私は$facebook->getAccessToken()を使用しようとしていましたが、getUserAccessToken()の結果を返せない場合は、ユーザーにアプリケーションアクセストークン(getApplicationAccessToken()経由)を与えるようなコードを見ていました。私が正しいとすれば、それはユーザにgetAccessToken()からのアクセストークンを渡すと、特定の状況下でAPI秘密を返す可能性があることを意味します。PHP SDKで安全にユーザーにaccess_tokenを与えることはできますか?

安全にアクセストークンを取得するにはどうすればよいですか?

答えて

0

getUser()を使用すると、アクセストークンを返す前に現在のユーザーセッションがあることを確認できます。 EDIT:コメントに記載されているように、これはFacebookのPHPクライアントがどのように機能するかは分かりません。ユーザーのCookieにはユーザーIDだけでなく、無効な(有効期限切れの)codeも含まれます。 PHPクライアントは、codeをユーザーアクセストークンと交換しようとし、失敗します。したがってgetUser()はユーザーIDを返し、getAccessToken()はアプリアクセストークンを返します。 getUser()は、有効なユーザーアクセストークンを確認する有効な方法ではありません。

あなたはそれに細心の注意を払う:<app id>|<some hash, possibly your secret>の形式のFacebookアプリトークン。返すアクセストークンにその形式がないことを確認できます。

$token = $fb->getAccessToken(); 
$tokenParts = explode('|', $token, 2); 
if ($tokenParts[0] != <your_app_id>) { 
    return $token; 
} else { 
    return null; 
} 
+0

セッション情報が無効であってもgetUserがユーザーIDを返すことがあります。 –

+0

私はこれも最近気づいた。私はあなたが同じことを見つけたかどうか分からない:JSクライアントは有効なユーザーIDを含む無効な "コード"(このフローでユーザーアクセストークンを交換するために必要なもの)を含むcookieにsigned_requestをドロップすることができます。 FBクライアントがこれを処理する方法のバグのようです。 – bismark

+0

私はこれもバグだと思います。期限切れのセッションがあった人に、私は誤ってクライアントシークレットを漏らしました。幸いにも、私はそれをリセットすることができました(そして私はしました)が、今このgetuserの問題があります。セッションがうまくいけば、少なくとも私のアプリはうまくいきます。 –

関連する問題