安全無縫的密碼金鑰:部署檢查清單

密碼金鑰可徹底改變登入體驗,提供比密碼更簡單、快速且安全的替代方案。這份檢查清單將引導您逐步完成實作密碼金鑰的各項重點,以便取得最佳使用者體驗 (UX) 成效。

如何使用這份檢查清單

這份檢查清單適用於在驗證流程中導入密碼金鑰的開發人員和產品團隊。其用途如下:

  • 請確認您的實作方式符合下列文章中所述的現代密碼金鑰使用者體驗最佳做法。
  • 找出可改善可用性、安全性和相容性的必要和選用元素。
  • 在開發期間和部署前檢查導入狀態。
  • 遵循最佳做法,以便支援使用者採用和系統互通性。

這有助於您為使用者提供順暢安全的體驗。

密碼金鑰註冊

如要在網站上順利從密碼轉換為密碼金鑰,您必須具備完善的密碼金鑰註冊功能。請按照「為無密碼登入建立密碼金鑰」一文的操作說明,在網站上建構密碼金鑰註冊功能。除了基本密碼金鑰登錄功能外,您還應檢查下列事項:

✅ 指定 "platform" 做為要傳遞至 navigator.credentials.create() 的驗證工具附件值,以便建立已提升的密碼金鑰。

  • 為那些需要即時建立密碼金鑰的使用者,提供最佳化且無摩擦的密碼金鑰建立流程。

✅ 請先使用最安全的驗證方法驗證使用者,再允許他們建立密碼金鑰。

  • 這項做法非常重要,可防止攻擊者在遭盜用的帳戶中建立密碼金鑰。

✅ 使用 excludeCredentials 避免為相同密碼金鑰供應器建立重複的密碼金鑰。

  • 許多密碼金鑰供應商只允許每個帳戶和 RP ID 使用一個密碼金鑰。避免建立重複的內容。

使用 AAGUID 識別密碼金鑰提供者,並為使用者命名憑證。

  • 將密碼金鑰與密碼金鑰提供者建立關聯,是一種直覺的方式,可在適當情況下提供憑證。

✅ 如要透過 PublicKeyCredential.signalUnknownCredential() 傳送訊號,指出註冊密碼金鑰的嘗試失敗。

  • 因為隨機的密碼金鑰可能會造成混淆。讓密碼金鑰供應商知道伺服器是否註冊密碼金鑰失敗。

✅ 為使用者建立並註冊帳戶密碼金鑰後,傳送通知給使用者

  • 請務必讓使用者知道密碼金鑰已建立,尤其是由其他人建立時。

密碼金鑰驗證

同時滿足密碼使用者和密碼金鑰使用者的需求,並確保使用體驗順暢無礙,是一項挑戰。請按照「透過表單自動填入功能使用密碼金鑰登入」一文的操作說明,在網站上建構密碼金鑰表單自動填入功能。除了基本密碼金鑰驗證功能外,您還應檢查下列事項:

✅ 允許使用者透過表單自動填入功能登入

  • 如果您的網站正從密碼轉換為密碼金鑰,為了同時滿足兩種使用者的需求,建議您使用瀏覽器的表單自動填入功能。

✅ 在後端使用 PublicKeyCredential.signalUnknownCredential() 時,如果找不到密碼金鑰的對應憑證,就會傳送信號。

  • 因為隨機的密碼金鑰可能會造成混淆。讓密碼金鑰提供者知道哪些密碼金鑰無法使用,以便提供者刪除。

✅ 如果使用者在登入後未建立密碼金鑰,請提示使用者手動建立密碼金鑰。

  • 如果使用者尚未建立密碼金鑰,請鼓勵他們建立。

✅ 在使用者以密碼 (和第二因素) 登入後,自動建立密碼金鑰 (條件式建立)

  • 加快使用者採用密碼金鑰的速度。

✅ 如果使用者已透過跨裝置密碼金鑰登入,請提示建立本機密碼金鑰

  • 建立本機密碼金鑰後,使用者下次登入時就不必掃描 QR code。

✅ 在登入後,向提供者傳送可用密碼金鑰清單更新的使用者詳細資料 (使用者名稱、顯示名稱)

  • 請確保在伺服器和密碼金鑰供應器之間,密碼金鑰清單和使用者詳細資料保持同步,以改善使用者體驗。

密碼金鑰管理

讓使用者充分掌握密碼金鑰,有助於他們進一步瞭解密碼金鑰的整體情況,並控管密碼金鑰。請按照「協助使用者有效管理密碼金鑰」一文中的操作說明,在網站上建構密碼金鑰管理功能。請檢查以下事項:

✅ 允許使用者在密碼金鑰管理頁面中管理密碼金鑰。

  • 建立使用者可管理密碼金鑰的集中管理頁面。

✅ 支援註冊多個密碼金鑰

  • 註冊多個密碼金鑰可協助使用者避免遭到鎖定,而無須改用較不安全的驗證方法。

✅ 允許使用者在管理頁面上新增靈活的密碼金鑰類型

✅ 顯示密碼金鑰名稱

  • 根據 AAGUID 命名密碼金鑰,並提供使用者密碼金鑰的實體視覺效果。

✅ 指示密碼金鑰是否可同步或無法同步

  • 在密碼金鑰未同步時通知使用者。

✅ 允許使用者從伺服器移除公開金鑰

✅ 在伺服器中移除相關聯的公開金鑰時,傳送密碼金鑰清單的信號。

  • 讓伺服器和密碼金鑰供應器之間的密碼金鑰清單保持同步,可改善使用者體驗。
密碼金鑰管理頁面示例,顯示良好做法。
密碼金鑰管理頁面示例,顯示最佳做法。

其他注意事項

✅ 在使用者更新時,傳送更新的使用者詳細資料 (使用者名稱、顯示名稱)

當使用者「忘記密碼」時,請建立密碼金鑰,而非新密碼

資源