9

ユーザーが Facebook 経由で登録できる携帯電話アプリを作成しています。登録が完了すると、ユーザーは、私がホストする RESTful Web サービスを介してパーソナライズされた情報にアクセスできるようになります。

同様のセットアップを使用しているように見えるが、Facebook (または Twitter) OAuth 認証のみをユーザーに提示するさまざまなモバイル アプリを見てきました。私はこれがどのように行われるのだろうか?

この Web サービスを保護するには、ユーザーの Facebook OAuth アクセス トークンをパスワードとして HTTPS 経由で HTTP 基本認証を使用できると考えました。

これは安全ですか?Facebook経由でのみユーザーを登録する場合、他のアプリはどのようにセキュリティを処理しますか?

4

1 に答える 1

11

この種の形式を使用するアプリは、通常、次のことを行います。

  1. アプリ自体は FB に登録されたアプリです。つまり、アプリ キーがあります。
  2. ユーザーが FB を使用して登録すると、実際に起こっていることは、ユーザーがアプリにアクセス許可を与え、データを表示したり、ウォールに投稿したりできるようにすることです (アプリが要求するアクセス許可が何であれ)。
  3. ユーザーがログインすると、アプリ キーを使用してサービスで認証されている限り、アプリは FB からユーザーの情報を要求できます。

したがって、アプリケーション内では通常、ユーザーの FB ID を保存し、データのリクエスト (またはウォールへの投稿のリクエストなど) を行うときは、アプリ キー + ユーザーの FB ID を送信します。提供する必要があるアクション情報。すると、FB サービスは、ユーザーが閲覧権限を持っているデータを返信するか、実行権限があればアクションを実行します。

RESTful 環境では、秘訣は、完全にステートレスであることが想定されていることです。つまり、セッションは追跡されません。ただし、これは問題ありません。アプリには既にアプリ キーがあるため、必要なのは要求ごとのユーザーの FB ID だけです。ID を Cookie に挿入するか、クライアント側で管理するだけで十分簡単です。これはどうですか?

アプリを Facebook に登録するときは、そのアプリをホストする URL を提供する必要があります。これは主に、クロスサイト Cookie と CORS リクエストをサポートするためです。つまり、リクエストが FB によって認識され、アプリ キーに関連付けられている URL から送信されている限り、FB は自分の Cookie に完全にアクセスできるため、サイトにいるユーザーが誰であるかを認識します。

では、FB を使用してサイトを OAuth 対応にしようとしているあなたにとって、これは何を意味するのでしょうか?

これは基本的に、FB がログイン システムになることを意味します。あなたは次のことを主張しています:

「FBがユーザーが本人であると言っている限り、私もそれを信頼します。」

そのため、ユーザーがサイトにアクセスして [Facebook を使用してログイン] ボタンをクリックすると、サイトには成功または失敗のいずれかが返されます。これを実装する方法の詳細については、具体的にはFacebook Developersサイトを参照してください。具体的には、次のリファレンスを参照してください。

  1. フェイスブックログイン
  2. API リファレンス > ログイン
  3. ログインダイアログ
  4. アクセストークンとタイプ
  5. ログイン アーキテクチャ

FB が成功を示すトークンを返すと、FB の API を介して情報を取得した相手がサイトを使用している人物であると断言できます。たとえば、FB ID を主キーとしてデータベースに保存すると、その値に基づいて独自の API からの結果をフィルタリングできるようになります。

往復は次のようになります。

  1. 認証されていないユーザーがサイトに到着
  2. Facebook で認証するためのログイン ボタンをリダイレクト/提供する
  3. FB Graph API を実行して、ユーザーの現在認証されている ID を特定します。
  4. UI スクリプトは、Graph から受け取った FB ID とそのリクエストを API レイヤーに送信します。
  5. API レイヤーは、FB ID (ユーザー レコードに関連付けられている) に基づいてデータをフィルタリングし、適切なデータを返します。

これが役に立てば幸いです。ご不明な点がございましたら、コメントでお問い合わせください。できる限り詳細を追加します。

于 2012-12-24T20:06:14.217 に答える