仕組み
ネイティブアプリの場合、「Appleでサインイン」ログインフローは次のように機能します。
-
ステップ1と2 :ユーザーはiOSデバイス上のAppleのSDKを介して認証し、応答で認可コードを受け取ります。ユーザーはアプリを離れてブラウザを使用してログインする必要はありません。
nonceの使用は避けてください。nonceを使用すると、Appleへの要求がステップ4で失敗し、Auth0がユーザーに400エラー「Error from Apple connection(Apple接続からのエラー)」を返します。
-
ステップ3 :アプリケーションはAuth0 の
/oauth/token
エンドポイントを呼び出して、Apple認可コードをAuth0トークンと交換します。 - ステップ4と5 :Auth0プラットフォームは、トークンと引き換えにAppleと認可コードを交換します。Auth0はトークンを検証し、トークン内のクレームを使用してユーザーのIDを構築します。
- ステップ6 :Auth0はユーザープロファイルを保存し、ルールと認可を実行してから、要求に応じてAuth0のアクセストークン(更新トークンとIDトークン)を発行します。これらのトークンは、Auth0によって管理されるAPIとユーザーを保護するために使用されます。
前提条件
Auth0でネイティブアプリに「Appleでサインイン」を構成する前に、次の操作を行ってください。- Appleの有料アカウントであるApple Developerアカウントを持っている。(iOS Developer University Programに参加していない限り、無料トライアルはご利用いただけません。)
-
まだ登録していない場合は、Apple Developer Portalにアプリを登録してください。のアプリケーション接続設定の次のIDとキーをメモします。
- App ID(アプリID)
- Apple Team ID
- クライアントシークレット署名鍵
- キーID
-
クラシックログインフローを使用している場合、またはアプリケーションに
Lock.js
を埋め込んでいる場合は、Lock.js
バージョン11.16以降を使用していることを確認してください。
Auth0で接続を構成して有効にする
Apple Developerアカウントから必要な資格情報を取得したら、Auth0でアプリケーションクライアントと接続設定を構成する必要があります。- [Auth0 Dashboard(Auth0ダッシュボード)]>[Applications(アプリケーション)]>[Applications(アプリケーション)]に移動して、アプリケーションを選択し、ギアアイコンを選択して設定ページを表示します。
-
ページ下部で [Show Advanced Settings(詳細設定を表示)] を選択し、 [Device Settings(デバイス設定)] ビューを選択します。 [Native Social Login(ネイティブソーシャルログイン)] で [Enable Sign In with Apple(Appleでサインインを有効にする)] を有効にします。
- iOS で、 App ID フィールドにネイティブアプリのApp ID/バンドル識別子を入力します。
- [Auth0 Dashboard]>[Authentication(認証)]>[Social(ソーシャル)]に移動して、 [Create Connection(接続の作成)] を選択します。
- Apple 接続を選択し、同意します。
-
[Settings(設定)] タブで、次のフィールドを記入しします。
- [Apple Team ID(AppleチームID)]
- クライアントシークレット署名鍵
-
キーID
- [Applications(アプリケーション)] ビューにを選択し、アプリケーションの接続を有効にします。
- [Save(保存)] をクリックします。
ネイティブアプリをブラウザーからテストすることはできません。Apple接続にある [Try Connection(接続を試す)] ボタンは、Webベースのフローをテストするときに使用します。
ログアウト
ネイティブiOSログイン実装では標準のブラウザベースのフローが使用されないため、アプリケーション所有者はログアウトを適切に実行するように注意する必要があります。アプリケーションがログアウトを実行する必要がある場合、次のアクションを実行してください。- Auth0リフレッシュトークンを取り消す
- iCloudキーチェーンに保存されているAuth0リフレッシュトークンを削除する
- iCloudキーチェーンに保存されているAppleユーザー識別子を削除します。 また、ログアウトは、ユーザーのアクション(「ログアウト」ボタンのクリックなど)や、ユーザーが特定のアプリへのアクセスを取り消したことで発生する場合があることに注意してください。後者は、ネイティブのASAuthorizationAppleIDProvider.getCredentialStateメソッドを通じて示されます。
AppleのIdPの特徴は、 最初の 応答で、要求されたスコープ(email、first name、last nameなど)のみをIDトークンに含めて返すことです。より破壊的なログアウトの方法(ユーザーを削除するなど)を採用すると、プロファイル情報が失われ、エンドユーザーがアプリの認証を解除して再認証しなければならなくなります。