「次のPHPの例では、CSRF保護機能を備えたサーバー側のフローを、自己完結型の1つの例で示しています。」と表示されています。http://developers.facebook.com/docs/authentication/です。 なぜsession_start();必要ですか?私は、セッションの作業がどこで開始されるのか終了するのか分かりません。 CSRFの保護はどのように機能しますか? ユーザーログイン直後にアクセストークンが返されないのはなぜですか?Facebook認証でセッションが始まる場所はどこですか?
答えて
あなたはスクリプトの一番上に一度、それが印刷される前に一度電話をかけます。
その後、$_SESSION
アレイにアクセスできます。これにより、$_SESSION['state']
のような値をあるページ呼び出しから別のページ呼び出しに格納することができます。
この例のコードは、CSRF protectionです。最初にttを呼び出すと、セッションにランダムな値が格納され、その後で比較されます。
続きを読むphp sessionsを参照してください。
更新コメント付きのスクリプト。スクリプトの上にある画像を見ていると、そこからいくつかの点がマークされています。
// Set your facebook config here
$app_id = "YOUR_APP_ID";
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_URL";
// start session to store random state
session_start();
// get a code from the request
$code = $_REQUEST["code"];
// if no code was send to the script...
if(empty($code)) {
// generate a random, unique id and store it the session
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
// create facebook dialog url
$dialog_url = "https://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state'];
// redirect user to facebook
// Facebook login and App Permissions request
// "GET OAuth Dialog"
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
// CSRF protection: check if state parameter is the same as
// we stored it in the session before the redirect
if($_REQUEST['state'] == $_SESSION['state']) {
// do facebook auth "GET /oauth/authorize"
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = @file_get_contents($token_url);
$params = null;
parse_str($response, $params);
// "GET me?access_token"
$graph_url = "https://graph.facebook.com/me?access_token="
. $params['access_token'];
$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
}
else {
echo("The state does not match. You may be a victim of CSRF.");
}
ありがとう!なぜユーザーのログイン直後にアクセストークンが返されないのですか?それは実際に何をしていますか? –
「facebook dialog」とは何ですか? –
Facebookのログイン情報(必要な場合)とアプリのアクセス許可のリクエストが含まれています。ページの最初の2枚の写真に表示されています。 – PiTheNumber
- 1. MVCでは、認証コードを入れる場所はどこですか?
- 2. Facebookで認証コードを設定する場所BOT
- 3. Facebookのファンページをアップロードする場所はどこですか?
- 4. 検証を変更する場所はどこですか?
- 5. firebase facebook認証コードでアクティビティを開始
- 6. WWDC 2012セッション208で「Restrospector」ツールに言及する場所はどこですか?
- 7. iOS:AliPayの統合を開始する場所はどこですか?
- 8. Facebookのチェックイン用の場所/場所は何ですか?
- 9. Googleの場所のチェックインはどこで確認できますか?
- 10. パッケージソースの場所はどこですか
- 11. ASP.NETで認証チェックを行う場所
- 12. フォーム認証テーブルの場所
- 13. Rails:コントローラ認証はセッション認証に必要ですか?
- 14. 中央の場所でセッションを確認する方法
- 15. Facebookのアプリケーションはどこから始めるべきですか?
- 16. 他の場所からハイブを開始することができません
- 17. ユーザー認証を傍受する場所
- 18. ユーザーを認証する場所 - ゲームセンター
- 19. 認証トークンを保存する場所
- 20. FacebookでAPIゲートウェイ通話を認証する方法は?ここ
- 21. ユーザー認証情報をAngularアプリケーションに格納する場所はどこですか?
- 22. ASP.NETフォーム認証Cookieを目的のiPhone/iPadアプリケーションに格納する場所はどこですか?
- 23. アプリケーションプールがダウンしている場所はどこですか?
- 24. GoogleプレイスAPIへのリクエスト数を確認する場所はどこですか?
- 25. Jrubyでレールを始める場所は?
- 26. Rails 3が発見したプラグインを作成する場所はどこから始めるべきですか?
- 27. コマンドの認証を確認する場所は?
- 28. yii2のセッションで作業する場所
- 29. Facebook認証ポリシー、どの情報を取得できますか?
- 30. コードイグナイターでグローバルオブジェクトをインスタンス化する場所はどこですか?
関連質問:http://stackoverflow.com/questions/6656097/how-does-this-csrf-protection-work – PiTheNumber