始める前に
- Facebook Login SDK をセットアップする - Facebook Login SDK for iOS をインストールして設定します。developers.facebook.com で Facebook アプリを作成します。この時点で、アプリで Facebook Login が動作している必要があります。
- Auth0 で Facebook Native を設定する - Facebook Native Sign In を使用するように Auth0 アプリケーションを設定します。詳細は、ネイティブアプリに Facebook Login を追加する を参照してください。
はじめに
1
Facebook Login のアクセス許可を設定する
ViewController の Facebookログインボタンを更新して、正しい権限をリクエストするようにします。アプリはすでに 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 Dashboard の Applications セクションに移動し、Facebook Native Sign In を有効にしたアプリケーションを選択します。ドメイン と クライアント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 アプリ 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 のネイティブ接続に振り分けます。6
全体をまとめる
performLogin メソッドを完成させて、次の 3 つの手順を連続して実行できるようにします: セッショントークンの取得 → ユーザープロファイルの取得 → Auth0 トークンへの交換。ViewController.swift
チェックポイントこれで、Facebook でネイティブ認証できるようになっているはずです。デバイスに Facebook アプリがインストールされている場合、認証はブラウザーを介さず、アプリ内で直接行われます。
トラブルシューティングと高度な内容
本番運用時の考慮事項
本番運用時の考慮事項
セキュリティのベストプラクティス
- トークンの安全な保存: Auth0.swift の
CredentialsManagerを使用して、iOS Keychain にトークンを安全に保存します - リフレッシュトークン:
offline_accessスコープを要求し、CredentialsManagerを使用して期限切れのトークンをサイレントに更新します - 生体認証による保護: 保存された認証情報を保護するために、
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権限を拒否した場合に対応できるようにします — アプリはこの権限がなくても動作する必要があります - 申請前に実機でテストします。Facebook SDK はシミュレーターでは挙動が異なります
Async/Await の代替
Async/Await の代替
iOS 15 以降を対象にする場合は、async/await を使用して、より簡潔でネストのないコードを記述できます。async/await への橋渡しとして、各コールバックベースのメソッドを
ViewController.swift
withCheckedThrowingContinuation でラップします。次のステップ
他のIDプロバイダーを設定
Google、Apple などのソーシャルログインプロバイダーを追加
Attack Protection
ブルートフォース攻撃やボット攻撃を防止
Actions
サーバーレスコードで認証フローをカスタマイズ
iOS SDK リファレンス
Auth0.swift SDK のドキュメントを詳しく見る