始める前に
- Facebook Login SDK をセットアップする - iOS 向け Facebook Login SDK をインストールして設定します。developers.facebook.com で Facebook アプリを作成してください。完了したら、アプリで Facebook Login が動作する状態にしておきます。
- Facebook Native 用に Auth0 を設定する - Facebook Native Sign In を使用するように Auth0 アプリケーションを設定します。詳しくは、Add Facebook Login to Native Apps を参照してください。
はじめに
1
Facebook Loginの権限を設定する
ViewController の Facebook Login ボタンを更新して、正しい権限をリクエストします。アプリはすでに Facebook Login をサポートしていますが、より充実したユーザープロファイルを取得するには、public_profile と email の権限をリクエストする必要があります。さらに、Auth0 の認証フローを開始するためのデリゲートコールバックも追加します。ViewController.swift
email 権限は任意であり、共有するにはユーザーの同意が必要です。Facebook から返されるメールアドレスは、Auth0 ユーザープロファイルで 未検証としてフラグ付け されます。2
Auth0 SDKをインストールして設定する
Auth0.swift SDK をプロジェクトに追加し、アプリケーションの資格情報を設定します。Swift Package Manager で Auth0.swift を追加する:
- Xcode で File → Add Package Dependencies… を選択します
- パッケージ URL
https://github.com/auth0/Auth0.swiftを入力します - 最新バージョンを選択し、Add Package をクリックします
Auth0.plist に Auth0 の資格情報を追加する:Auth0 Dashboard の アプリケーション セクションに移動し、Facebook Native Sign In を有効にしたアプリケーションを選択します。Domain と Client ID の値をコピーします。プロジェクトに Auth0.plist という名前の新しいプロパティリストファイルを作成し、次の内容を追加します:Auth0.plist
Auth0.plist を Xcode にドラッグし、アプリのターゲットで Add to target がチェックされていることを確認してください。3
Facebookセッションのアクセストークンを取得
Facebook Login が成功したら、Facebook API からセッションアクセストークンを取得します。Auth0 では、バックエンドでユーザーの本人確認を行うためにこのトークンが必要です。
GraphRequest クラスを使用して、Facebook の /oauth/access_token エンドポイントに GET リクエストを送信します:ViewController.swift
必要なクエリパラメータは次のとおりです。
grant_type:fb_attenuate_tokenfb_exchange_token: Facebook のAccessTokenのトークン文字列client_id: Facebook の App ID (Facebook SDK の設定時に、すでにInfo.plistに含まれています)
4
Facebookのユーザープロファイルを取得する
Facebookからユーザーのプロファイルを取得します。Auth0 はこのデータを使用して、ユーザーの Auth0 プロファイルを作成または更新します。
ViewController.swift
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でネイティブ認証を行えるようになります。端末にFacebookアプリがインストールされている場合、認証はそのアプリで直接処理されるため、ブラウザは不要です。
トラブルシューティングと高度な設定
本番運用時の注意点
本番運用時の注意点
セキュリティのベストプラクティス
- 安全なトークン保存: Auth0.swift の
CredentialsManagerを使用して、iOS Keychain に token を安全に保存します - リフレッシュトークン:
offline_accessscope をリクエストし、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 を含めます
- ユーザーが
emailpermission を拒否した場合にも対応できるようにします。アプリはそれがなくても動作する必要があります - 申請前に実機でテストします。Facebook SDK はシミュレータでは挙動が異なります
Async/Await の代替案
Async/Await の代替案
iOS 15+ を対象とする場合は、async/await を使用して、よりすっきりとしたネストの少ないコードを書けます。async/await につなげるには、各コールバックベースのメソッドを
ViewController.swift
withCheckedThrowingContinuation でラップします。次のステップ
他のアイデンティティプロバイダーを設定
Google、Apple、その他のソーシャルログインプロバイダーを追加
攻撃対策
ブルートフォース攻撃やボット攻撃を防ぐ
Actions
サーバーレスコードで認証フローをカスタマイズ
iOS SDK リファレンス
Auth0.swift SDK のドキュメント全体を確認