30

次のブロックを使用してアプリケーションを構築しています。

Android-クライアント側、Javaサーブレット-サーバー側、Facebookアプリ-ユーザーを認証し、データを操作するために使用されます。

私の問題は次のとおりです:Facebook経由でユーザーを認証したい(たとえば、facebook-android-sdkを使用してAndroidクライアントからFacebookに送信されたリクエスト)が、サーバーにリクエストを送信したい(これはによって実装されています)サーブレット)そして、リクエストを送信するユーザーがFacebookと私のアプリケーションに対して認証されていることを何らかの方法で検証します。

したがって、これらの手順は次のとおりです。

ユーザーXは、facebook-android-sdkを使用してFacebookと私のFacebookアプリに対して認証されています。Xがサーバーにリクエストを送信しています

サーバーに関しては、それが私と一緒に作業している適切なユーザーであることを知りたいだけです。サーバーがGraphAPIリクエストを実行する必要はありません。

Xがサーバーで有効であることをどのように知ることができますか?その場合、認証はクライアント側で実行されました。

4

2 に答える 2

58

つまり、Facebook-Androidアプリケーション-Webサーバーです。そしてあなたのウェブサーバーはあなたがあなたが提示しているFacebookユーザーであることを知る必要があります。問題は、Androidクライアントから提供されるデータを信頼できないことです。

私はこのような問題を解決しました:

  1. AndroidアプリケーションからFacebookへのユーザーの認証、
  2. AndroidアプリへのFB認証トークンを取得します。
  3. 認証トークンとFacebookUIDをAndroidからWebサーバーに転送します。
  4. ここ( https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow#checktoken)で説明されているように、Facebook Graphデバッグエンドポイントを使用してトークンを(app_idとuser_idを使用して)確認します。トークンが正しいアプリケーション用であること
  5. Webサーバーで、送信されたトークンを使用してFacebookAPI呼び出しを行います。

WebサーバーからのデバッグエンドポイントAPI呼び出しが有効な情報(アプリIDとユーザーID)を返す場合、サーバーはIDを信頼できます(Android認証が本物であることを確認できます)

于 2011-12-09T09:30:19.993 に答える