Skip to main content

始める前に

このクイックスタートを進める前に、次の事前準備を完了してください。
  1. Facebook Login SDK をセットアップする - iOS 向け Facebook Login SDK をインストールして設定します。developers.facebook.com で Facebook アプリを作成してください。完了したら、アプリで Facebook Login が動作する状態にしておきます。
  2. Facebook Native 用に Auth0 を設定する - Facebook Native Sign In を使用するように Auth0 アプリケーションを設定します。詳しくは、Add Facebook Login to Native Apps を参照してください。

はじめに

1

Facebook Loginの権限を設定する

ViewController の Facebook Login ボタンを更新して、正しい権限をリクエストします。アプリはすでに Facebook Login をサポートしていますが、より充実したユーザープロファイルを取得するには、public_profileemail の権限をリクエストする必要があります。さらに、Auth0 の認証フローを開始するためのデリゲートコールバックも追加します。
ViewController.swift
email 権限は任意であり、共有するにはユーザーの同意が必要です。Facebook から返されるメールアドレスは、Auth0 ユーザープロファイルで 未検証としてフラグ付け されます。
2

Auth0 SDKをインストールして設定する

Auth0.swift SDK をプロジェクトに追加し、アプリケーションの資格情報を設定します。Swift Package Manager で Auth0.swift を追加する:
  1. Xcode で FileAdd Package Dependencies… を選択します
  2. パッケージ URL https://github.com/auth0/Auth0.swift を入力します
  3. 最新バージョンを選択し、Add Package をクリックします
Auth0.plist に Auth0 の資格情報を追加する:Auth0 Dashboardアプリケーション セクションに移動し、Facebook Native Sign In を有効にしたアプリケーションを選択します。DomainClient ID の値をコピーします。プロジェクトに Auth0.plist という名前の新しいプロパティリストファイルを作成し、次の内容を追加します:
Auth0.plist
Auth0.plist を Xcode にドラッグし、アプリのターゲットで Add to target がチェックされていることを確認してください。
Auth0.swift SDK は Auth0.plist から資格情報を自動的に読み取るため、追加の初期化コードは必要ありません。
3

Facebookセッションのアクセストークンを取得

Facebook Login が成功したら、Facebook API からセッションアクセストークンを取得します。Auth0 では、バックエンドでユーザーの本人確認を行うためにこのトークンが必要です。GraphRequest クラスを使用して、Facebook の /oauth/access_token エンドポイントに GET リクエストを送信します:
ViewController.swift
必要なクエリパラメータは次のとおりです。
  • grant_type: fb_attenuate_token
  • fb_exchange_token: Facebook の AccessToken のトークン文字列
  • client_id: Facebook の App ID (Facebook SDK の設定時に、すでに Info.plist に含まれています)
4

Facebookのユーザープロファイルを取得する

Facebookからユーザーのプロファイルを取得します。Auth0 はこのデータを使用して、ユーザーの Auth0 プロファイルを作成または更新します。
ViewController.swift
fields パラメータは、リクエストした Facebook の権限に直接対応しています。Auth0 が完全なユーザープロファイルを作成するには、first_namelast_nameemail をリクエストすれば十分です。
5

トークンをAuth0の資格情報と交換する

前の手順で取得したセッショントークンとユーザープロファイルを使用してAuth0で認証し、Auth0トークンを取得します。Auth0認証クライアントで login(facebookSessionAccessToken:profile:audience:scope:) を呼び出します。
ViewController.swift
内部的には、Auth0.swift はトークンタイプ http://auth0.com/oauth/token-type/facebook-info-session-access-token を使用して、リクエストを Facebook Native 接続にルーティングします。
6

すべてを組み合わせる

performLogin メソッドを完成させて、3 つのステップをすべて連続して実行できるようにします: セッショントークンの取得 → ユーザープロファイルの取得 → Auth0 トークンへの交換。
ViewController.swift
マジック文字列を避けるため、定数 (Facebookの権限、Auth0のスコープ) はクラスの先頭にまとめておきましょう。iOS 15以降を対象にする場合は、ネストしたコールバックをすっきりさせるために async/await の利用も検討してください。
チェックポイントこれで、Facebookでネイティブ認証を行えるようになります。端末にFacebookアプリがインストールされている場合、認証はそのアプリで直接処理されるため、ブラウザは不要です。

トラブルシューティングと高度な設定

認証エラーでトークン交換に失敗する

対処方法:
  1. Auth0 Dashboard で、Auth0アプリケーションの Facebook Native Sign In が有効になっていることを確認します
  2. Info.plistFacebookAppID が Facebook Developer Console の App ID と一致していることを確認します
  3. Auth0.plist ファイルが Xcode の正しいターゲットに追加されていることを確認します
  4. performLogin を呼び出す前に、Facebook の access token の有効期限が切れていないことを確認します

セッショントークンのリクエストでエラーが返る

対処方法:
  • FacebookAppIDInfo.plist に正しく設定されていることを確認します
  • fb_exchange_token が生のトークン文字列 (accessToken.tokenString) であることを確認します
  • 管理者以外のユーザーでテストする場合は、Facebook アプリが Development Mode になっていないことを確認します

AuthenticationError: “Connection not found”

対処方法:
  1. Auth0 Dashboard → AuthenticationSocial に移動します
  2. Sign in with Facebook が有効になっていることを確認します
  3. 接続設定で Facebook Native Social Login がオンになっていることを確認します
  4. Auth0アプリケーションが Facebook 接続に関連付けられていることを確認します

ユーザープロファイルの項目が不足している

  • "email""public_profile"fbLoginButton.permissions 配列に含まれていることを確認します
  • ユーザーが email permission を拒否した可能性があります。email が nil の場合でも適切に処理してください
  • fetchUserProfilerequest.parameters["fields"] 呼び出しに同じフィールドが含まれていることを確認します

Auth0.plist が見つからない

  • ファイル名が正確に Auth0.plist であることを確認します (大文字と小文字は区別されます)
  • Xcode でそのファイルの Target Membership を確認します。アプリのターゲットに含まれている必要があります

セキュリティのベストプラクティス

  • 安全なトークン保存: Auth0.swift の CredentialsManager を使用して、iOS Keychain に token を安全に保存します
  • リフレッシュトークン: offline_access scope をリクエストし、CredentialsManager を使用して期限切れの token をサイレントに更新します
  • 生体認証による保護: 保存された資格情報を保護するため、CredentialsManager で生体認証を有効にします

Facebook アプリの設定

  • App Store にリリースする前に、Facebook アプリを Development Mode から Live に切り替えます
  • アプリの Bundle ID が Facebook Developer Console に登録されていることを確認します
  • Login SDK を使用するアプリに対する Facebook の Data Policy の要件を確認します

App Store への申請

  • アプリのプライバシーポリシーと App Store のプライバシー栄養表示に Facebook Login を含めます
  • ユーザーが email permission を拒否した場合にも対応できるようにします。アプリはそれがなくても動作する必要があります
  • 申請前に実機でテストします。Facebook SDK はシミュレータでは挙動が異なります
iOS 15+ を対象とする場合は、async/await を使用して、よりすっきりとしたネストの少ないコードを書けます。
ViewController.swift
async/await につなげるには、各コールバックベースのメソッドを withCheckedThrowingContinuation でラップします。

次のステップ

他のアイデンティティプロバイダーを設定

Google、Apple、その他のソーシャルログインプロバイダーを追加

攻撃対策

ブルートフォース攻撃やボット攻撃を防ぐ

Actions

サーバーレスコードで認証フローをカスタマイズ

iOS SDK リファレンス

Auth0.swift SDK のドキュメント全体を確認