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

依賴方 (RP) 可以檢查關聯公開金鑰憑證的 AAGUID,藉此判斷要建立哪個密碼金鑰供應器。

密碼金鑰管理方面的挑戰

使用密碼金鑰的其中一項優點,就是能讓使用者在單一帳戶中建立多個密碼金鑰。即使使用者因遺失其中一個密碼金鑰而無法登入帳戶,仍可透過其他密碼金鑰登入信賴者,享有這種彈性,以及密碼金鑰的穩固性。

如果使用者在 RP 上管理多個密碼金鑰,就需要在需要編輯或刪除特定密碼金鑰時,找出正確的密碼金鑰。如果使用者想移除未使用的密碼金鑰,就很適合這麼做。建議您在密碼金鑰清單中附加密碼金鑰的相關資訊,例如建立日期和上次使用日期。藉此協助使用者找到特定密碼金鑰。

RP 也可以讓使用者在建立密碼金鑰後立即命名,但許多使用者不會。在理想情況下,密碼金鑰的名稱會自動反映用戶端傳送的信號或公開金鑰憑證中包含的資訊。

瀏覽器提供可依賴的使用者代理程式字串來為密碼金鑰命名,但具備擴充功能功能的平台 (例如 Android、iOS 或電腦版瀏覽器) 允許透過第三方密碼管理工具建立密碼金鑰,而使用者代理程式字串不一定代表真正的密碼金鑰供應商。

透過 Authenticator 註冊時傳回的公開金鑰憑證中包含的 Authenticator 全域專屬 ID (AAGUID),RP 可判斷密碼金鑰提供者,並讓使用者輕鬆找到正確的密碼金鑰。

使用 AAGUID 決定密碼金鑰提供者

AAGUID 是一組專屬編號,可識別驗證器的模型 (而非驗證器的特定執行個體)。您可以在公開金鑰憑證的驗證器資料中找到 AAGUID。

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

RP 可以使用 AAGUID 來識別密碼金鑰提供者。舉例來說,如果使用者透過 Google 密碼管理工具在 Android 裝置上建立密碼金鑰,該 RP 就會收到 "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4" 的 AAGUID。受限方可以在密碼金鑰清單中為密碼金鑰加上註解,表明密碼金鑰是在 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 對應至密碼金鑰供應商。