だから私は自分のウェブサイト用に独自の API を開発しています。システムの動作に関して Facebook JS SDK を模倣しています。API クライアントがボタンを表示し、ポップアップが表示され、ユーザーがログインできるようになります。ログイン ポップアップがオープナー ウィンドウにイベントを発行し、親ウィンドウはユーザーがログインしていることを認識します。これですべてが機能します。
私が理解に苦しんでいるのは、更新要求が有効であることを確認する方法です。API クライアントがサーバーにリクエストを送信して、ユーザーがログインしているかどうかを確認する必要があり、それがすべて JS にある場合、すべてが透過的です。API クライアントは、「こんにちは、私はアプリケーション 4jhkk2l3bnm389 です。Facebook にログインしているユーザーも私で認証されていますか? もしそうなら、API 呼び出しを行うことができるように新しいトークンを送ってもらえますか?」と言います。そして Facebook は、「ああ、あなたはアプリケーション 4jhkk2l3bnm389 ですか? ええ、ユーザーはログインしており、ユーザーの情報へのアクセスを許可しています。これがアクセス トークンです。」
しかし、Facebook は、正規のアプリケーションではない外部アプリケーションが、「ねえ、私は実際にはアプリケーション 4jhkk2l3bnm389 です。嘘をついていないことを約束します。アクセス トークンを取得できますか?」と言うのをどのように防ぎますか?
彼らがどのように違いを決定するのか私にはわかりません。明らかに、すべてが最新のブラウザーで AJAX 呼び出しを介して行われた場合は、Access-Control-Allow-Origin ヘッダーを提供するだけで済みます。しかし、悪意のあるクライアントが cURL を使用した場合、私にはその違いを見分けることはできないと思います。Facebookはどのようにそれを行いますか? 良い説明は大歓迎です!ありがとう!