- Webアプリケーション向けのユニバーサルログインのパスキー。
- ネイティブモバイルアプリケーション(iOS、Android)およびWebアプリケーション向けのPasskey API。
- Webおよびネイティブアプリケーション向けの埋め込みログイン
始める前に
カスタムドメインを構成するネイティブのパスキーには。始める前に、テナントにカスタムドメインが構成されていることを確認してください。詳細については、「カスタムドメイン」をお読みください。パスキーポリシーを構成するAndroidまたはiOSのアプリケーションにネイティブのパスキーを実装するには、まずAuth0テナントでパスキーポリシーを構成しなければなりません。テナントを準備するには、「パスキーポリシーを構成する」に記載の手順に従います。アプリケーションを準備するPasskey APIを使用するすべてのアプリケーションは、
Passkeyの付与を追加して、証明書利用者ID(RP ID)を構成する必要があります。プラットフォームによっては、または。仕組み
Passkey APIは、Auth0 Authentication APIとプラットフォーム固有の資格情報APIを組み合わせて、チャレンジフローをアプリケーションに直接埋め込みます。つまり、ネイティブモバイルアプリでは、iOSまたはAndroidのプラットフォームAPIを使用し、Webアプリケーションでは、WebAuthnブラウザAPIを使用します。これにより、認証を完了させるためにユーザーをブラウザからリダイレクトさせることなく、統合されたサインアップおよびログインエクスペリエンスを構築できます。 以下の例は、パスキーのサインアップフローで新しいユーザーが体験する可能性のあるプロセスを説明しています。- 新しいユーザーがモバイルアプリケーションを起動して、ログイン画面にアクセスします。新しいユーザーであるため、**[サインアップ]**を選択します。
- ユーザーが次の画面でメールアドレスを入力し、**[アカウントの作成]**を選択します。
- 次に、アプリケーションのパスキーを作成したいかがユーザーに尋ねられます。ユーザーが**[続ける]**を選択して続行します。
- パスキーを生成するために、ユーザーは生体認証や他の認証方法(PINの入力など)を使って、デバイスをローカルで認証しなければなりません。
- ローカルの認証が完了すると、新しいパスキーがユーザーのデバイスに保存され、iCloudキーチェーンやGoogleパスワードマネージャーなどのパスキープロバイダーと同期されます。
- パスキーが保存されると、ユーザーが新規ユーザー登録プロセスを続行して、アカウント登録を完了させます。
デバイスの設定を構成する
- iOS
- Android
- Web
Auth0 Dashboardでデバイスの設定を構成する
- アプリケーション > アプリケーションに移動して、アプリケーションを選択します。
- [設定]タブの下部にある**[高度な設定]**を選択します。
- **[デバイス設定]**タブを選択します。
- **[iOS]**セクションで、Appleからの次のIDを入力します。
- チームID
- App ID
- **[変更を保存]**を選択します。
-
Auth0は、構成されたチームIDおよびApp IDに基づいて、
https://YOUR_CUSTOM_DOMAIN/.well-known/apple-app-site-associationでテナントのカスタムドメイン上のapple-app-site-associationファイルを自動的にホストします。このファイルをご自身でホストする必要はありません。 -
Xcodeで、Associated Domainsのエンタイトルメントを有効にして、次のような形式でカスタムドメインのエントリを追加します:
webcredentials:YOUR_CUSTOM_DOMAIN。
Passkeyの付与を有効にする
すべてのプラットフォームでPasskeyの付与を有効にするには以下を行います。
- アプリケーション > アプリケーションに移動して、アプリケーションを選択します。
- [高度な設定]セクションで、**[付与タイプ]**タブを選択します。
- **[パスキー]の付与を有効してから、[変更を保存]**を選択します。
grant_typesを更新して、urn:okta:params:oauth:grant-type:webauthnを含めます。- ネイティブアプリには、
mobileオブジェクトを使用し、必要に応じてiOSおよびAndroidのデバイス設定を指定します。
証明書利用者ID(rpId)
異なるアプリケーションタイプまたは異なるサブドメインを持つアプリケーションタイプにおいて単一のパスキーを使用して認証するエンドユーザには、Auth0 Dashboard > テナント設定で、ルートドメインまたは親ドメインに証明書利用者IDを設定します。
パスキーフローを実装する
アプリケーションには以下のパスキーフローを定義することができます。- サインアップフロー:新しいユーザーがユーザー登録プロセスでパスキーを生成して保存できるようにします。
- ログインフロー:パスキーに登録済みの既存のユーザーが、ログインプロセスで保存済みのパスキーを使って認証できるようにします。
- 登録フロー:既存のユーザーが認証後に自分のアカウントにパスキーを追加できるようにします。
サインアップフロー
アプリケーションに初めてログインしようとしたときに、ユーザーがパスキーのサインアップフローを始めます。ユーザーが、既存の識別子を提供した場合には、代わりに、ログインフローの完了をユーザーに求めることをお勧めします。そうしないと、アクションが失敗します。- アプリケーションは、
POST /passkey/registerエンドポイントを呼び出して、サインアップチャレンジを開始します。
realmを指定しない場合には、テナントにデフォルトのディレクトリが使用されます。- デフォルトでは、
emailが必須の識別子です。データベース接続でFlexible Identifiersを有効にした場合は、代わりにemail、phone_number、またはusernameの組み合わせを使用することができます。
- Auth0は、
auth_sessionIDとともに、パスキーの作成に必要なPublicKeyCredentialCreationOptionsを返します。
- アプリケーションは、返された
PublicKeyCredentialCreationOptionsを使用して、ユーザーのデバイスにパスキーを作成します。方法はプラットフォームによって異なります。
- iOS
- Android
- Web
ASAuthorizationPlatformPublicKeyCredentialProviderを使用して、Face ID、Touch ID、またはデバイスPINで資格情報を作成します。詳細については、「iOSでの登録に関するドキュメント」をご覧ください。- アプリケーションは、登録プロセスからの資格情報を使用して
POST /oauth/tokenエンドポイントを呼び出し、資格情報をトークンと交換します。
- Auth0は新しいユーザーアカウントを作成して、例が示すような要求されたトークンを返します。
ログインフロー
既存のユーザーがアプリケーションにログインしようとしたときに、パスキーのログインフローを始めます。このフローは、既存のユーザーが最初のサインアップでアカウントにパスキーを保存している場合にのみ有効です。- アプリケーションが、
POST /passkey/challengeエンドポイントを呼び出し、ログインチャレンジを開始します。
realmを指定しない場合には、テナントにデフォルトのディレクトリが使用されます。- Auth0は、
auth_sessionとともにPublicKeyCredentialRequestOptionsを返します。
- アプリケーションは、返された
PublicKeyCredentialRequestOptionsを使用して、ユーザーのデバイスからパスキーを取得します。方法はプラットフォームによって異なります。
- iOS
- Android
- Web
ASAuthorizationPlatformPublicKeyCredentialProviderを使用して、Face ID、Touch ID、またはデバイスPINで資格情報を取得します。詳細については、「iOSでのログインに関するドキュメント」をご覧ください。- アプリケーションは、ログインプロセスからの資格情報を使用して
POST /oauth/tokenエンドポイントを呼び出し、資格情報をトークンと交換します。
- Auth0が、資格情報を認証して要求されたトークンを返します。
登録フロー
登録フローでは、ユーザーがユーザー名やパスワードなど別の方法で認証されていると、自分のアカウントにパスキーを追加できます。認証済みの既存ユーザーが新しいパスキーを登録する場合は、My Account APIを使用します。始める前に
登録フローを開始する前に、以下を行います。
- テナントでMy Account APIを有効にします
/meエンドポイントのcreate:me:authentication_methodsスコープを持つアクセストークンを取得します。
- 認証済みのアプリケーションが、アクセストークンを使用して、
POST /me/v1/authentication-methodsエンドポイントを呼び出します。
- Auth0は、チャレンジおよびセッションIDを返します。
- アプリケーションが、返された
PublicKeyCredentialCreationOptionsを使用して、サインアップフローと同様のプラットフォーム固有の手順に従って、ユーザーのデバイスにパスキーを作成します。
- iOS
- Android
- Web
ASAuthorizationPlatformPublicKeyCredentialProviderを使用して、Face ID、Touch ID、またはデバイスPINで資格情報を作成します。詳細については、「iOSでの登録に関するドキュメント」をご覧ください。- ユーザーがAuthenticatorでパスキーを作成した後、
POST /me/v1/authentication-methods/passkey|new/verifyエンドポイントを呼び出し、登録を完了させます。
証明書利用者ID
使用するアプリケーションの1つで作成されたパスキーは、その他のアプリケーション、ネイティブアプリケーション、またはWebアプリケーションが同一の証明書利用者ID(rpId)を共有する場合、これらにサインインするために使用できます。この仕組みが機能するのは、パスキープロバイダー(iCloudキーチェーン、Googleパスワードマネージャー、1Password、Dashlaneなど)が同一プロバイダー内にあるユーザーのデバイスにおいて資格情報を同期するからです。
プラットフォーム間でユーザーを移行する
ほとんどの場合、ユーザーはQRコードを読み取ったり、別のデバイスを使ったりする必要はありません。使用しているデバイスでパスキーがすでに存在するかどうかによって、フローは異なります。- 同一プロバイダー、異なるデバイス(最も一般的):ユーザーがiOSアプリでパスキーを登録すると、iCloudキーチェーンによってパスキーがMacに同期されます。その結果、ユーザーはMac上のWebアプリに即座にサインインできます。同様に、Androidで登録したパスキーは、Googleパスワードマネージャーを通じて、同じGoogleアカウントでサインインしているChromebookやWindows PCのChromeに同期されます。
- クロスエコシステムまたは共有デバイス(あまり一般的ではない):ユーザーが使用中のデバイスでパスキーを利用できない場合(例:iPhoneにあるパスキーをWindows PCで使う、公衆の共有PCを使う)、ブラウザはQRコードによる認証を提示します。これはハイブリッドトランスポート(CTAP 2.2)を使用して、ユーザーのスマートフォン経由で認証を行う仕組みです。ユーザーは自分のパスキーをスマートフォンに保持したままで、QRコードはその1回のサインインのためだけに、2つのデバイスを橋渡しします。
証明書利用者IDを選択する
rpIdは、パスキーを使用できるオリジンを決定します。Auth0は、デフォルトでrpIdをカスタムドメインに設定します。パスキーを機能させるスコープに最も適したrpIdを選択します。それ以上に広げません。
推奨:auth.example.comやaccounts.example.comなど、認証領域および製品領域にスコープを定義する親ドメインを使用します。“rpId=auth.example.comで作成されたパスキーは、auth.example.comおよびそのサブドメイン(例:app.auth.example.com、m.auth.example.com)上で機能します。
**eTLD+1(registrable apex)をrpId**として使用することは避けます(例:example.com)。このレベルでrpIdを設定すると、example.comのすべてのサブドメインが、マーケティングサイト、サードパーティがホストするサービス、または他のチームによって運用されるドメインを含めて、それらのパスキーをリクエスト、使用できてしまいます。これにより、信頼境界が認証領域を大きく超えて広がります。
証明書利用者IDについて詳しくは、「RP IDの詳細」をお読みください。
マルチドメインとブランドのシナリオ
複数のブランドドメイン(例:login.brand1.comとlogin.brand2.com)を提供する場合、パスキーはそれらを跨いで自動的に機能しません。つまり、ドメインごとに、独自のrpIdがあります。ドメインごとの登録、通信、移行のパターンについては、「マルチカスタムドメインを使用するパスキー」をお読みください。
構成チェックリスト
rpIdを選択したら、すべてのアプリケーションで共有されていることを確認します。
- パスキーを共有する必要のあるネイティブアプリケーションおよびWebアプリケーションのすべてで、
rpIdとしてカスタムドメインを1つ使用します。 - ネイティブアプリケーションでは、iOSのチームID/App ID、およびAndroidのパッケージ名/SHA-256フィンガープリントを使用して、Auth0 Dashboardで[デバイス設定]を構成します。Auth0は、カスタムドメイン上の
apple-app-site-associationおよびassetlinks.jsonファイルを自動的にホストします。 - Webアプリケーションでは、
rpIdまたはそのサブドメインからWebオリジンを提供して、CORSの**[許可するWebオリジン]**に追加します。
参考情報
アプリケーションにパスキー認証を実装する際には、以下のリソースを参考にすることができます。-
Auth0 APIs
- Authentication API:パスキー認証のエンドポイントを確認してください。
- My Account API:パスキー登録エンドポイントについてお読みください。
- My Account APIに関するドキュメント:アクティベーション、スコープ、およびCORSについて詳細をご覧ください。
- プラットフォームに関するドキュメント
-
追加のリソース
- passkeys.dev:包括的なパスキー実装ガイド。