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

証明書利用者(RP)は、関連付けられた公開鍵認証情報の AAGUID を調べることで、パスキーが作成されたパスキー プロバイダを特定できます。

パスキー管理の課題

パスキーを使用するメリットの一つは、ユーザーが 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 をパスキー プロバイダにマッピングできます。