1. ホーム
  2. ios

[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン

2022-03-24 22:21:30

質問事項

目標 iOSアプリケーションでFacebook認証を行い、保護されたウェブサービスにアクセスできるようにする。

想定していること Facebookをサインインに使用しないことを選択したユーザーのために、ネイティブな認証(および登録)システムが用意されています。

詳細はこちら

  • ユーザーが、当社のシステム用に別のアカウントやクレデンシャルを作成せずに、Facebookでサインインするオプションを提供したいとします。
  • 私たちは独自のネイティブ認証メカニズム(ユーザー名とパスワード)をサポートしているため、独自のユーザーIDを持ち、最初のクレデンシャル検証後の後続のインタラクションに使用される認証トークンを発行しています。

Facebookの開発者向けドキュメントに、これに関するベストプラクティスが掲載されていないのは驚きです。既存のドキュメントはすべて、FB authをウェブサイトに組み込むか、認証を必要とするサービスのないスタンドアロンのモバイルアプリを想定しています。

これが正しいかどうか検証してほしい。

  1. クライアントが Facebook iOS ログインをポップアップします。
  2. UI ユーザーがFacebookの認証情報でサインインし、アクセストークンを取得する。
  3. iOSアプリがアクセストークンを弊社サーバーに渡す
  4. サーバーはアクセストークンを使ってFBグラフAPIと通信し、(a)トークンを検証し、(b)そのアクセストークンに対するFBユーザーIDを取得する。

    例:サーバーは https://graph.facebook.com/me/?access_token=XYZ これはプロファイル情報をJSONオブジェクトで返します。

  5. JSONオブジェクトが有効であれば、サーバーはユーザーIDを抽出し、そのユーザーがすでにアカウントを持っているかどうかをチェックします。もしあれば、そのセッションで使用するために、独自の認証チケットをクライアントに発行します。 ユーザーがアカウントを持っていない場合、FacebookのユーザーIDで新しいアカウントを作成し、独自のUserIDを割り当て、認証チケットを発行します。

  6. クライアントは、認証が必要な後続のインタラクションで認証チケットを引き渡します。

これは私にとって正しいアプローチのように思えますが、何かめちゃくちゃ基本的なことを見逃して、間違った(複雑な)道を進んでいるのかどうか分かりません。

どのように解決するのですか?

私自身、ちょうどこの件に対処したところですが、ここで私が噛みついた部分があります。

ステップ5では... ユーザーがFacebook IDとは全く別のアカウントを登録することは可能ですよね?そして、別の機会にFacebookでログインする......。そして、あなたは彼らに2つ目のアカウントを作成し、1つ目のアカウントを失いました。

ウェブサービスにログインした後、facebookにログインし、facebook IDとローカルアカウントの関連性を把握する方法が必要です。

それを除けば、あなたの計画は堅実だと思います。

更新情報 : Facebookは、そのようなシナリオを概説するドキュメントを追加しました。 こちら