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

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

密碼金鑰管理的挑戰

使用密碼金鑰的好處之一,就是使用者可以為單一帳戶建立多個密碼金鑰。有了這種彈性和密碼金鑰的穩健性,即使使用者因遺失密碼金鑰而無法登入帳戶,仍可使用其他密碼金鑰登入依附方。

在 RP 上管理多個密碼金鑰的使用者,在需要編輯或刪除特定密碼金鑰時,會遇到難以辨識正確密碼金鑰的問題。舉例來說,如果使用者想移除未使用的密碼金鑰,建議您在密碼金鑰清單中附加密碼金鑰的相關資訊,例如建立日期和上次使用日期。這有助於使用者找到特定密碼金鑰。

開發人員也可以允許使用者在建立密碼金鑰時或之後命名密碼金鑰,但許多使用者並未這麼做。在理想情況下,密碼金鑰的名稱會自動反映用戶端傳送的信號或公開金鑰憑證中包含的資訊。

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

有了驗證器認證全球唯一 ID (AAGUID),您就能在密碼金鑰註冊時傳回的公開金鑰憑證中使用這項資訊,讓 RP 判斷密碼金鑰供應商,並讓使用者輕鬆找到正確的密碼金鑰。

使用 AAGUID 判斷密碼金鑰供應商

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

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

RP 可使用 AAGUID 識別密碼金鑰供應器。舉例來說,如果使用者在 Android 裝置上使用 Google 密碼管理工具建立密碼金鑰,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 對應至密碼金鑰供應器。