信賴方 (RP) 可以檢查相關聯公開金鑰憑證的 AAGUID,判斷密碼金鑰是由哪個密碼金鑰供應商建立。
密碼金鑰管理難題
使用密碼金鑰的好處之一,就是使用者可以為單一帳戶建立多個密碼金鑰。密碼金鑰不僅安全可靠,還能提供這種彈性,因此即使使用者遺失其中一個密碼金鑰而無法登入帳戶,仍可使用其他密碼金鑰登入信賴方。
如果使用者在 RP 上管理多個密碼金鑰,需要編輯或刪除特定密碼金鑰時,可能會難以識別。舉例來說,使用者想移除未使用的密碼金鑰時,建議 RP 在密碼金鑰清單中附加密碼金鑰的相關資訊,例如建立日期和上次使用日期。方便使用者尋找特定密碼金鑰。
RP 也可以允許使用者在建立密碼金鑰時或之後命名,但許多使用者不會這麼做。理想情況下,系統會根據用戶端傳送的信號或公開金鑰憑證中包含的資訊,自動命名密碼金鑰。
瀏覽器會提供使用者代理程式字串,供依賴方用來命名密碼金鑰,但 Android、iOS 或具備擴充功能功能的電腦瀏覽器等平台,允許第三方密碼管理工具建立密碼金鑰,且使用者代理程式字串不一定代表實際的密碼金鑰提供者。
藉由密碼金鑰註冊時傳回的公開金鑰憑證中包含的驗證器認證全球唯一 ID (AAGUID),RP 可以判斷密碼金鑰提供者,並協助使用者找到正確的密碼金鑰。
使用 AAGUID 判斷密碼金鑰供應商
AAGUID 是指驗證器型號的專屬號碼 (而非驗證器的特定例項)。AAGUID 位於公開金鑰憑證的驗證器資料中。

RP 可以使用 AAGUID 識別密碼金鑰供應商。舉例來說,如果使用者在 Android 裝置上使用 Google 密碼管理工具建立密碼金鑰,RP 會收到 "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4"
的 AAGUID。RP 可以在密碼金鑰清單中註解密碼金鑰,指出該密碼金鑰是在 Google 密碼管理工具中建立。

如要將 AAGUID 對應至密碼金鑰供應商,RP 可以使用社群來源的 AAGUID 存放區。在清單中查詢 AAGUID,即可找到密碼金鑰供應商名稱和圖示 SVG 資料文字。
大多數 WebAuthn 程式庫都提供擷取 AAGUID 的功能。以下範例顯示使用 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 對應至密碼金鑰供應商。