透過 AAGUID 判斷密碼金鑰提供者

依賴方 (RP) 可以透過檢查相關公開金鑰憑證的 AAGUID,判斷哪些密碼金鑰提供者建立密碼金鑰。

密碼金鑰管理功能帶來的挑戰

使用密碼金鑰的其中一項優點,是能讓使用者為單一帳戶建立多個密碼金鑰。儘管使用者因遺失其中一個密碼金鑰而遭鎖定帳戶,仍可享有上述彈性和密碼金鑰功能,因此仍可使用其他密碼金鑰登入依賴方。

如果使用者要透過單一 RP 管理多個密碼金鑰,就必須在需要編輯或刪除特定密碼金鑰時,找出正確的密碼金鑰。當使用者想移除未使用的密碼金鑰時,就是一個很好的例子。建議您在密碼金鑰清單中附加密碼金鑰相關資訊,例如建立日期和上次使用日期。協助使用者找出特定密碼金鑰。

此外,RP 功能也能讓使用者在建立密碼金鑰後立即輸入名稱,但許多使用者不會這麼做。在理想情況下,密碼金鑰會自動命名,反映用戶端傳送的信號或公開金鑰憑證中的資訊。

瀏覽器提供使用者代理程式字串,供依賴方為密碼金鑰命名,但 Android、iOS 或電腦版瀏覽器等平台具備擴充功能,就可以透過第三方密碼管理工具建立密碼金鑰,但使用者代理程式字串不一定代表實際的密碼金鑰提供者身分。

透過 Authenticator Attestation 全域唯一識別碼 (AAGUID) 時,使用者購買密碼金鑰時傳回的公開金鑰憑證會隨附驗證憑證,藉此判斷密碼金鑰提供者,以便使用者輕鬆找到正確的密碼金鑰。

透過 AAGUID 判斷密碼金鑰提供者

AAGUID 是用來識別驗證器型號 (而非驗證器特定例項) 的專屬編號。AAGUID 會是公開金鑰憑證驗證器資料的一部分。

說明內含驗證器資料 (包含認證憑證資料) 和認證陳述式的認證物件版面配置。
您可以在驗證器資料中找到 AAGUID。

RP 可以使用 AAGUID 來識別密碼金鑰提供者。舉例來說,如果使用者使用 Google 密碼管理工具在 Android 裝置上建立密碼金鑰,RP 將收到 "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4" 的 AAGUID。RP 可以在密碼金鑰清單中為密碼金鑰加上註解,表明這是透過 Google 密碼管理工具建立的密碼金鑰。

安全性設定頁面中的密碼金鑰設定會顯示各密碼金鑰的詳細資訊。
密碼金鑰管理 UI 範例。

如要將 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 對應至密碼金鑰提供者。