このガイドでは、最新のウェブ アプリケーションで、フレームワークに依存しない安全なパスキー認証と認証情報管理を実装するための、高密度でアクション指向のオリエンテーションを提供します。
1. パスキーの主な前提条件
パスキーは Web Authentication API(WebAuthn)に依存しています。WebAuthn では、実装を試みる前に満たす必要がある、厳格な横断的セキュリティ制約が課されます。
- 安全なコンテキスト: WebAuthn メソッド(
navigator.credentials.createとnavigator.credentials.get)は、安全なコンテキストの背後に厳密に制限されています。アプリケーションは、本番環境ではhttps://で、ローカル開発ではhttp://localhostで実行する必要があります。 - リライング パーティ(RP)ID: すべての認証情報は RP ID(基本的にはアプリケーションのドメイン名)に関連付けられます。サーバーサイドのオプションで渡される RP ID は、現在のオリジンのドメイン名と一致するか、有効なサフィックスである必要があります(例:
example.comはlogin.example.comに対して有効)。一致しない場合、クライアントサイドでSecurityError例外が発生します。
2. AAGUID UX の注意点
Authenticator Attestation Globally Unique Identifier(AAGUID)は、登録証明データで返される 128 ビットの固有識別子で、認証システムのモデル / プロバイダ(Google パスワード マネージャー、iCloud キーチェーン、1Password など)を表します。
- UX ヒントのみ: 証明書利用者は、UX ヒント(ユーザーを支援するために管理リストにパスキー プロバイダの名前とアイコンを表示するなど)にのみ AAGUID を使用する必要があります。
- セキュリティ依存関係なし: アプリケーションは、暗号化セキュリティまたはアクセス決定に AAGUID を使用してはなりません。プラットフォーム パスキーは現在、AAGUID の暗号化構成証明を提供していません。つまり、ユーザー エージェントによって変更またはシミュレートされる可能性があります。
3. 分離されたライブラリの推奨事項
バックエンドの FIDO2 / WebAuthn オプションの生成と署名の検証では、デベロッパーは、暗号を手動でロールするのではなく、言語ごとに検証済みのオープンソース ライブラリを使用しなければなりません。
- JavaScript / TypeScript: SimpleWebAuthn(github.com/MasterKale/SimpleWebAuthn)
- Python: py_webauthn(github.com/duo-labs/py_webauthn)
- Java: Java WebAuthn Server(github.com/Yubico/java-webauthn-server)、WebAuthn4J(github.com/webauthn4j/webauthn4j)
- .NET: FIDO2 用 .NET ライブラリ(github.com/abergs/fido2-net-lib)
- Go: WebAuthn Go Library(github.com/go-webauthn/webauthn)
- Ruby: WebAuthn Ruby(github.com/cedarcode/webauthn-ruby)
- PHP: WebAuthn Framework(github.com/web-auth/webauthn-framework)
4. ユースケース参照マトリックス
以下のユースケースから該当するものを特定し、その実装ガイド全体を確認してください。すべてのユースケースには、ユースケースごとのガイドにのみ記載されている重要な API(PublicKeyCredential.parseCreationOptionsFromJSON、parseRequestOptionsFromJSON、signalAllAcceptedCredentials、signalCurrentUserDetails、signalUnknownCredential、条件付きメディエーション、AAGUID 処理など)があります。この取得ステップをスキップしないでください。また、クライアントでサードパーティのライブラリ ラッパー(SimpleWebAuthn の startAuthentication/startRegistration など)を代わりに使用しないでください。ネイティブの WebAuthn ブラウザ API を直接呼び出してください。セクション 3 のライブラリの推奨事項は、サーバーサイド(バックエンド FIDO2 検証)にのみ適用されます。
パスキーと WebAuthn の具体的な実装の詳細については、次のガイドをご覧ください。
- パスキー登録: パスキー登録 - 新しいパスキーの登録とプロモーションを提供します。
- パスキーの条件付き作成: パスキーの条件付き作成(ログイン後のプロモーション) - パスワードによるログインが成功した直後に、パスキーをサイレント登録します。
- パスキー認証: パスキー認証 - 検出可能な自動入力とボタンによるログイン。
- クイック ログイン: 即時 UI モードによるクイック ログイン - ページ ナビゲーションの前に、ローカル パスキーと保存されたパスワードを使用してコンテキストに応じたインプレース ログインを行います。
- パスキー管理: パスキー管理 - パスワード マネージャーとのリストの同期、名前の変更、削除。
- パスキーによる再認証: パスキーによる再認証 - 機密性の高い操作を行う際に、ログイン済みのリピーター ユーザーを再確認します。