依賴方的密碼金鑰開發人員指南

瞭解如何將密碼金鑰整合至您的服務。

密碼金鑰系統剖析

密碼金鑰系統由幾個元件組成:

  • 依賴方:在密碼金鑰環境中,依賴方 (簡稱 RP) 會處理密碼金鑰的核發與驗證作業。RP 必須操作用戶端 (建立密碼金鑰或使用密碼金鑰進行驗證的網站或應用程式) 和伺服器,用於註冊、儲存及驗證用戶端密碼金鑰產生的憑證。密碼金鑰行動應用程式必須使用 OS 提供的關聯機制 (例如數位資產連結),繫結至 RP 伺服器網域。
  • Authenticator:適用於手機、平板電腦、筆記型電腦或桌上型電腦等運算裝置,可使用作業系統提供的螢幕鎖定功能建立及驗證密碼金鑰。
  • 密碼管理工具:在使用者裝置上安裝、儲存及同步處理密碼金鑰的軟體,例如 Google 密碼管理工具

註冊流程

在網站上使用 WebAuthn API 或 Android 應用程式的 Credential Manager 程式庫,建立及註冊新的密碼金鑰。

如要建立新的密碼金鑰,請提供幾個重要元件:

  • RP ID:請以網域的形式提供依賴方 ID。
  • 使用者資訊:使用者的 ID、使用者名稱和顯示名稱。
  • 要排除的憑證:有關先前儲存的密碼金鑰的資訊,以避免重複登錄。
  • 密碼金鑰類型:指定使用裝置本身 (「平台驗證器」) 做為驗證器,還是可拆卸的安全金鑰 (「跨平台 / 漫遊驗證器」)。此外,呼叫端也可以指定是否要讓憑證可供探索,讓使用者選取要登入的帳戶。

一旦 RP 要求建立密碼金鑰,且使用者透過螢幕解鎖方式進行驗證,系統會建立新的密碼金鑰並傳回公開金鑰憑證。請將該憑證傳送至伺服器,並儲存憑證 ID 和公開金鑰,以供日後驗證時使用。

註冊流程

請參閱下列文章,瞭解如何建立及註冊密碼金鑰:

驗證流程

在網站上使用 WebAuthn API,或 Android 應用程式中的 Credential Manager 程式庫,以使用已註冊的密碼金鑰進行驗證。

如要使用密碼金鑰進行驗證,請提供幾個金鑰元件:

  • RP ID:請以網域的形式提供依賴方 ID。
  • 挑戰:伺服器產生的挑戰,可防止重送攻擊。

一旦 RP 要求使用密碼金鑰進行驗證,且使用者透過螢幕解鎖要求進行驗證時,系統會傳回公開金鑰憑證。請將該金鑰傳送至伺服器,並使用儲存的公開金鑰驗證簽名。

驗證流程

進一步瞭解如何使用密碼金鑰進行驗證:

伺服器端整合

建立密碼金鑰後,伺服器必須提供重要參數,例如挑戰、使用者資訊、要排除的憑證 ID 等。接著驗證用戶端傳送的已建立公開金鑰憑證,並將公開金鑰儲存在資料庫中。使用密碼金鑰進行驗證時,伺服器必須謹慎驗證憑證並驗證簽章,讓使用者可以登入。

不過,自行建構密碼金鑰伺服器並不有效,且可能會導致發生重大安全事件的錯誤。建議您使用可用的開放原始碼程式庫,或有助於加快密碼金鑰整合速度的解決方案。

如要取得開放原始碼程式庫清單,請參閱 passkeys.dev 的程式庫部分,或是由群眾外包取得的 WebAuthn 程式庫清單。如要尋找解決方案,FIDO 聯盟擁有經認證的 FIDO2 伺服器名單

現有的 (舊版) 驗證機制

在現有的服務上支援密碼金鑰時,系統不會將舊驗證機制 (例如密碼和密碼金鑰) 的轉換作業從一天內完成。我們知道您將盡快移除防護力較弱的驗證方法,但這可能會造成使用者混淆,或讓他們感到困擾。建議您暫時保留現有的驗證方法。

這有幾個原因:

  • 因使用密碼金鑰而不相容的使用者:目前支援密碼金鑰的支援功能非常廣泛,包括多種作業系統和瀏覽器,但舊版作業系統的使用者還無法使用密碼金鑰。
  • 密碼金鑰生態系統尚未發展成熟:密碼金鑰生態系統正不斷演進,不同環境之間的使用者體驗詳細資料和技術相容性可以獲得改善。
  • 使用者可能尚未準備好使用密碼金鑰進行直播:有些人猶豫不決,想立即使用密碼金鑰。隨著密碼金鑰生態系統逐漸成熟,密碼金鑰也將能瞭解密碼金鑰的運作方式,以及其實用的原因。

重新檢查現有的驗證機制

雖然密碼金鑰可讓您的驗證程序更加簡單安全,但保留舊機制就像留下孔洞。建議您重新審視現有的驗證機制,並著手改善。

密碼

對使用者來說,設定高強度密碼及管理每個網站並不容易。強烈建議使用系統內建的密碼管理工具或獨立使用。對登入形式稍微微調了登入表單,網站和應用程式就能大幅改善其安全性和登入體驗。查看可以如何進行變更:

雙重驗證

雖然使用密碼管理工具可協助使用者處理密碼,但並非所有使用者都會使用。要求提供動態密碼 (OTP) 的額外憑證是保護這類使用者的常見做法。動態密碼通常是透過電子郵件、簡訊或驗證器應用程式 (例如 Google Authenticator) 提供。動態密碼通常是只在有限的時間範圍內動態產生的簡短文字,因此可降低帳戶遭盜用的可能性。這些方法的成效不如密碼金鑰,但是優於只用密碼讓使用者操作更好。

如果您選擇簡訊做為傳送動態密碼的方式,請按照下列最佳做法簡化使用者輸入動態密碼的體驗。

身分聯盟

「身分聯盟」是另一個讓使用者安全輕鬆登入的選項。透過身分聯盟,網站和應用程式可讓使用者透過第三方識別資訊提供者的使用者身分登入。舉例來說,使用 Google 帳戶登入可有效為開發人員帶來大量轉換,而使用者會覺得以密碼為基礎的驗證方式更輕鬆且偏好使用。身分聯盟與密碼金鑰是相輔相成的。註冊為網站或應用程式非常實用,因為只要一個步驟就能取得使用者的基本個人資訊,密碼金鑰則非常適合用於簡化重新驗證作業。

請注意,Chrome 在 2024 年逐步淘汰第三方 Cookie 後,部分身分聯盟系統可能會因其建構方式而受到影響。為減輕影響,我們正在開發名為 Federated Credential Management API (FedCM) 的新瀏覽器 API。如果您執行的是識別資訊提供者,請參閱詳細資料,確認是否需要採用 FedCM。

魔術連結登入是一種驗證方法,服務會透過電子郵件提供登入連結,讓使用者只要按一下連結就能自行驗證。雖然這個方法可協助使用者在不記住密碼的情況下登入帳戶,但在瀏覽器/應用程式和電子郵件用戶端之間切換將更加順暢。此外,由於驗證機制是以電子郵件為基礎,因此電子郵件供應商的強度不足,可能會導致使用者帳戶面臨風險。

學習資源

網站

如要將密碼金鑰整合至網站,請使用 Web Authentication API (WebAuthn)。詳情請參閱下列資源:

Android

如要將密碼金鑰整合至 Android 應用程式,請使用 Credential Manager 程式庫。詳情請參閱下列資源:

使用者體驗

歡迎瞭解密碼金鑰使用者體驗建議: