信頼関係のある当事者(RP)は、関連付けられた公開鍵認証情報の AAGUID を調べることで、パスキーが作成されたパスキー プロバイダを特定できます。
パスキー管理の課題
パスキーを使用するメリットの一つは、ユーザーが 1 つのアカウントに複数のパスキーを作成できることです。この柔軟性とパスキーの堅牢性により、ユーザーがパスキーを紛失してアカウントからロックアウトされた場合でも、別のパスキーを使用してリレーリング パーティにログインできます。
RP で複数のパスキーを管理しているユーザーにとっての課題は、特定のパスキーのみを編集または削除する必要があるときに、正しいパスキーを特定することです。たとえば、ユーザーが未使用のパスキーを削除する場合などです。RP は、パスキーリストにパスキーに関する情報(作成日や最終使用日など)を添付することをおすすめします。これにより、ユーザーは特定のパスキーを簡単に見つけることができます。
RP は、パスキーの作成直後または後でユーザーがパスキーに名前を付けることもできますが、多くのユーザーはそうしません。理想的には、パスキーの名前は、クライアントから送信されたシグナルや公開鍵認証情報に含まれる情報を反映して自動的に付けられます。
ブラウザは、信頼できる当事者がパスキーに名前を付けるために使用できるユーザー エージェント文字列を提供しますが、拡張機能機能を備えた Android、iOS、デスクトップ ブラウザなどのプラットフォームでは、サードパーティのパスワード マネージャーによってパスキーを作成できます。ユーザー エージェント文字列は、必ずしも実際のパスキー プロバイダを表すものではありません。
パスキー登録時に返される公開鍵認証情報に含まれる認証システム証明書のグローバルに一意の識別子(AAGUID)を使用すると、RP はパスキー プロバイダを特定し、ユーザーが適切なパスキーを簡単に見つけられるようにすることができます。
AAGUID を使用してパスキー プロバイダを特定する
AAGUID は、認証システムのモデル(認証システムの特定のインスタンスではない)を識別する一意の数値です。AAGUID は、公開鍵認証情報の認証データの一部として確認できます。
RP は AAGUID を使用してパスキー プロバイダを識別できます。たとえば、ユーザーが Android デバイスで Google パスワード マネージャーを使用してパスキーを作成した場合、RP は "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4"
の AAGUID を受け取ります。RP は、パスキーリスト内のパスキーにアノテーションを付け、Google パスワード マネージャーで作成されたことを示します。
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 をパスキー プロバイダにマッピングできます。