1

だから私は自分のウェブサイト用に独自の API を開発しています。システムの動作に関して Facebook JS SDK を模倣しています。API クライアントがボタンを表示し、ポップアップが表示され、ユーザーがログインできるようになります。ログイン ポップアップがオープナー ウィンドウにイベントを発行し、親ウィンドウはユーザーがログインしていることを認識します。これですべてが機能します。

私が理解に苦しんでいるのは、更新要求が有効であることを確認する方法です。API クライアントがサーバーにリクエストを送信して、ユーザーがログインしているかどうかを確認する必要があり、それがすべて JS にある場合、すべてが透過的です。API クライアントは、「こんにちは、私はアプリケーション 4jhkk2l3bnm389 です。Facebook にログインしているユーザーも私で認証されていますか? もしそうなら、API 呼び出しを行うことができるように新しいトークンを送ってもらえますか?」と言います。そして Facebook は、「ああ、あなたはアプリケーション 4jhkk2l3bnm389 ですか? ええ、ユーザーはログインしており、ユーザーの情報へのアクセスを許可しています。これがアクセス トークンです。」

しかし、Facebook は、正規のアプリケーションではない外部アプリケーションが、「ねえ、は実際にはアプリケーション 4jhkk2l3bnm389 です。嘘をついていないことを約束します。アクセス トークンを取得できますか?」と言うのをどのように防ぎますか?

彼らがどのように違いを決定するのか私にはわかりません。明らかに、すべてが最新のブラウザーで AJAX 呼び出しを介して行われた場合は、Access-Control-Allow-Origin ヘッダーを提供するだけで済みます。しかし、悪意のあるクライアントが cURL を使用した場合、私にはその違いを見分けることはできないと思います。Facebookはどのようにそれを行いますか? 良い説明は大歓迎です!ありがとう!

4

2 に答える 2

1

すべてのアクセストークンはアプリとユーザーのペアに属しており、Facebookがそのようなアクセストークンをアプリに返すには、これらを確認する必要があります。

アプリまたはclient_idは、redirect_uriで指定されたドメインに対して検証されます-ページが所有していないclient_id / redirect_uriペアを使用しようとすると、有効なredirect_uriに渡されるため、アクセストークンを受信しません( JS SDKが使用するメカニズムは同じルールに従います)。

ユーザーまたはuidは、サインイン時にFacebookが設定するCookieを使用して確認されます。

curlを使用してclient_id/redirect_uriペアを簡単にスプーフィングできますが、ユーザーCookieを所有している必要があるため、同じことはuidには適用されません。その場合は、独自のアプリケーションアクセスを許可するだけで済みます。

于 2012-08-28T07:09:56.823 に答える
0

Facebook は認証にOAuth 2.0を使用します。Facebook が OAuth をどのように扱うかについての詳細は、https ://developers.facebook.com/docs/authentication/ で確認できます。モバイル デバイス、facebook.com 自体のページ、またはあなたの場合は facebook.com 以外の Web ページを使用しているかどうかに応じて、OAuth を使用できるさまざまな方法があります。その最終フローの詳細は、https ://developers.facebook.com/docs/authentication/client-side/ にあります。

基本的に、Facebook は、ユーザーが自分の情報を表示する許可を与えたアプリケーションを認識しています。これらのアプリケーションの 1 つを実行すると、まず Facebook にログインしていることを確認し、次に Facebook にユーザー アクセス トークンを要求します。基本的には、「Facebook さん、私はこの人を知らないし、知らないはずです。彼らの情報にアクセスできますか?」. 次に、Facebook は内部を調べ、この特定のアプリケーションがこのユーザーの情報にアクセスできる必要があると判断した場合、ユーザー トークンを送信します。

それはそれを説明する簡単な方法です。前述のように、要求が発生しているデバイスの種類、これが facebook.com のページであるかどうかなどに応じて、基本的にセキュリティの制約に基づいて、認証フローが発生するさまざまな方法があります。詳細については、前述の Facebook 認証ドキュメントを参照することをお勧めします。

于 2012-08-28T02:31:49.667 に答える