AAGUID を使用してパスキーのプロバイダを確認する

認証情報プロバイダ(RP)は、関連付けられた公開鍵認証情報の AAGUID を調べることで、パスキーがどのパスキー プロバイダによって作成されたかを判断できます。

パスキー管理の課題

パスキーを使用するメリットの 1 つは、ユーザーが 1 つのアカウントに対して複数のパスキーを作成できることです。この柔軟性とパスキーの堅牢性により、ユーザーがパスキーの 1 つを紛失してアカウントからロックアウトされた場合でも、別のパスキーを使用してリライング パーティにログインできます。

RP で複数のパスキーを管理しているユーザーにとっての課題は、特定のパスキーを編集または削除する必要がある場合に、他のパスキーの中から適切なパスキーを特定することです。たとえば、ユーザーが未使用のパスキーを削除したい場合などです。RP は、パスキー リストに作成日や最終使用日などのパスキーに関する情報を付加することが推奨されます。これにより、ユーザーは特定のパスキーを見つけやすくなります。

RP は、パスキーの作成直後または後でユーザーがパスキーに名前を付けることを許可することもできますが、多くのユーザーはそうしません。理想的には、パスキーにはクライアントから送信されたシグナルや公開鍵認証情報に含まれる情報が自動的に反映されます。

ブラウザは、ユーザー エージェント文字列を提供します。この文字列は、パスキーの名前付けに利用できます。ただし、Android、iOS、拡張機能対応のデスクトップ ブラウザなどのプラットフォームでは、サードパーティのパスワード マネージャーによるパスキーの作成が許可されています。そのため、ユーザー エージェント文字列が、実際のパスキー プロバイダを表しているとは限りません。

パスキー登録時に返される公開鍵認証情報に含まれる Authenticator Attestation Globally Unique Identifier(AAGUID)を使用すると、RP はパスキー プロバイダを特定し、ユーザーが適切なパスキーを見つけられるようにサポートできます。

AAGUID でパスキー プロバイダを特定する

AAGUID は、認証ツールのモデル(認証ツールの特定のインスタンスではない)を識別する一意の番号です。AAGUID は、公開鍵認証情報の認証システム データの一部として確認できます。

認証システム データ(証明された認証情報データを含む)と証明書ステートメントを含む、構成された認証システム データのレイアウトを示す証明書オブジェクト。
AAGUID は認証システム データにあります。

RP は AAGUID を使用してパスキー プロバイダを識別できます。たとえば、ユーザーが Google パスワード マネージャーを使用して Android デバイスでパスキーを作成した場合、RP は "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4" の AAGUID を受け取ります。RP は、パスキーリスト内のパスキーに、Google パスワード マネージャーで作成されたことを示すアノテーションを付けることができます。

セキュリティ設定ページのパスキー設定には、各パスキーの詳細情報が表示されます。
パスキー管理 UI の例。

AAGUID をパスキー プロバイダにマッピングするために、RP は AAGUID のコミュニティ ソース リポジトリを使用できます。リストで AAGUID を検索すると、パスキー プロバイダ名とそのアイコンの SVG データテキストが見つかります。

AAGUID の取得は、ほとんどの WebAuthn ライブラリが提供する機能です。次の例は、SimpleWebAuthn を使用したサーバーサイドの登録コードを示しています。

// Import a list of AAGUIDs from a JSON file
import aaguids from './aaguids.json' with { type: 'json' };

...

 // Use SimpleWebAuthn handy function to verify the registration request.
const { verified, registrationInfo } = await verifyRegistrationResponse({
  response: credential,
  expectedChallenge,
  expectedOrigin,
  expectedRPID,
  requireUserVerification: false,
});

...

const { aaguid } = registrationInfo;
const provider_name = aaguids[aaguid]?.name || 'Unknown';

まとめ

AAGUID は、パスキーを作成したパスキー プロバイダを識別する一意の文字列です。RP は AAGUID を使用して、ユーザーがパスキーを簡単に管理できるようにすることができます。コミュニティ ソースの AAGUID リポジトリを使用して、AAGUID をパスキー プロバイダにマッピングできます。