瞭解如何將密碼金鑰整合至服務。
密碼金鑰系統架構
密碼金鑰系統由幾個元件組成:
- 信賴憑證者:在密碼金鑰環境中,信賴憑證者 (簡稱 RP) 會處理密碼金鑰核發和驗證作業。RP 必須運作用戶端 (建立密碼金鑰或使用密碼金鑰驗證的網站或應用程式),以及伺服器 (用於註冊、儲存及驗證用戶端密碼金鑰產生的憑證)。密碼金鑰行動應用程式必須使用作業系統提供的關聯機制 (例如數位資產連結),繫結至 RP 伺服器網域。
- Authenticator:運算裝置,例如手機、平板電腦、筆電或桌機,可使用作業系統提供的螢幕鎖定功能建立及驗證密碼金鑰。
- 密碼管理工具:安裝在使用者裝置上的軟體,可提供、儲存及同步密碼金鑰,例如 Google 密碼管理工具。
註冊流程
在網站上使用 WebAuthn API,或在 Android 應用程式上使用 Credential Manager 程式庫,即可建立及註冊新的密碼金鑰。
如要建立新密碼金鑰,請提供下列幾個重要元件:
- RP ID:以網域形式提供依賴方的 ID。
- 使用者資訊:使用者的 ID、使用者名稱和顯示名稱。
- 要排除的憑證:先前儲存的密碼金鑰相關資訊,可避免重複註冊。
- 密碼金鑰類型:使用裝置本身 (「平台驗證器」) 做為驗證器,或是使用可拆卸式安全金鑰 (「跨平台 / 漫遊驗證器」)。此外,呼叫端可以指定是否要讓使用者探索憑證,以便選取帳戶登入。
RP 要求建立密碼金鑰,使用者透過螢幕解鎖驗證後,系統就會建立新的密碼金鑰並傳回公開金鑰憑證。將該資訊傳送至伺服器,並儲存憑證 ID 和公開金鑰,以供日後驗證。
如要詳細瞭解如何建立及註冊密碼金鑰,請參閱下列文章:
驗證流程
在網站上使用 WebAuthn API,或在 Android 應用程式上使用 Credential Manager 程式庫,透過已註冊的密碼金鑰進行驗證。
如要使用密碼金鑰進行驗證,請提供下列幾個重要元件:
- RP ID:以網域形式提供依賴方的 ID。
- 驗證問題:伺服器產生的驗證問題,可防止重播攻擊。
RP 要求使用密碼金鑰驗證身分,使用者透過解鎖螢幕驗證後,系統就會傳回公用金鑰憑證。將該簽章傳送至伺服器,並使用儲存的公開金鑰驗證簽章。
如要瞭解如何使用密碼金鑰驗證,請參閱下列文章:
伺服器端整合
建立密碼金鑰時,伺服器必須提供金鑰參數,例如驗證問題、使用者資訊、要排除的憑證 ID 等。然後驗證從用戶端傳送的已建立公開金鑰憑證,並將公開金鑰儲存在資料庫中。如要使用密碼金鑰進行驗證,伺服器必須仔細驗證憑證並驗證簽章,才能讓使用者登入。
如要瞭解詳情,請參閱下列伺服器端指南:
現有 (舊版) 驗證機制
在現有服務中支援密碼金鑰時,從密碼等舊版驗證機制轉換為密碼金鑰,不會在一夕之間發生。我們知道您可能會想盡快淘汰較弱的驗證方法,但這可能會造成使用者困惑,或導致部分使用者無法登入。建議您暫時保留現有的驗證方式。
這有幾個原因:
- 使用者處於不支援密碼金鑰的環境:密碼金鑰支援功能已在多個作業系統和瀏覽器中廣泛推出,但舊版作業系統和瀏覽器目前仍不支援密碼金鑰。
- 密碼金鑰生態系統尚未成熟:密碼金鑰生態系統仍在發展中。不同環境之間的 UX 詳細資料和技術相容性可能會有所提升。
- 使用者可能還沒準備好使用密碼金鑰:有些人不喜歡嘗試新事物,隨著密碼金鑰生態系統日趨成熟,使用者將瞭解密碼金鑰的運作方式,以及這項功能對他們的好處。
重新審查現有的驗證機制
密碼金鑰可讓驗證程序更簡單安全,但保留舊機制就像留下漏洞。建議您重新檢視並改善現有的驗證機制。
密碼
為每個網站建立及管理高強度密碼,對使用者來說是相當困難的任務。強烈建議使用系統內建的密碼管理工具或獨立的密碼管理工具。只要稍微調整登入表單,網站和應用程式就能大幅提升安全性及登入體驗。請參閱下列說明,瞭解如何進行這些變更:
- 登入表單最佳做法 (網頁)
- 註冊表單最佳做法 (網站)
- 透過 Credential Manager 讓使用者登入 (Android)
雙重驗證
雖然密碼管理工具可協助使用者處理密碼,但並非所有使用者都會使用。要求提供額外的憑證 (即動態密碼) 是保護這類使用者的常見做法。通常會透過電子郵件、簡訊或驗證器應用程式 (例如 Google Authenticator) 提供一次性密碼。因為 OTP 通常是動態產生的簡短文字,且僅在有限時間內有效,因此可降低帳戶遭盜用的機率。這些方法不如密碼金鑰安全,但比只讓使用者使用密碼好得多。
如果選取以簡訊傳送一次性密碼,請參閱下列最佳做法,簡化使用者輸入一次性密碼的流程。
- 簡訊動態密碼表單最佳做法 (網頁)
- 使用 SMS Retriever API 自動驗證簡訊 (Android)
身分聯盟
您也可以選擇身分聯盟,讓使用者安全又輕鬆地登入。 透過身分聯盟,網站和應用程式可讓使用者透過第三方身分提供者的身分登入。舉例來說,使用 Google 帳戶登入可為開發人員帶來出色的轉換率,使用者也覺得這項功能比以密碼為基礎的驗證方式更簡單好用。身分聯盟可與密碼金鑰互補。登入工作流程非常適合用於註冊,因為網站或應用程式只需一個步驟,就能取得使用者的基本個人資訊;密碼金鑰則非常適合用於簡化重新驗證程序。
請注意,Chrome 於 2024 年淘汰第三方 Cookie 後,部分身分同盟系統可能會受到影響,具體情況取決於系統的建構方式。為減輕影響,我們正在開發名為 Federated Credential Management API (簡稱 FedCM) 的新瀏覽器 API。如果您是身分識別資訊提供者,請查看詳細資料,瞭解是否需要採用 FedCM。
- Federated Credential Management API (Web、FedCM)
- 網頁版「使用 Google 帳戶登入」功能總覽 (網頁版「使用 Google 帳戶登入」功能)
- Android 版 One Tap 登入總覽 (Android、One Tap 登入)
「魔法連結」
魔法連結登入是一種驗證方法,服務會透過電子郵件傳送登入連結,使用者只要點選連結即可驗證身分。雖然這樣有助於使用者登入帳戶,不必記住密碼,但切換瀏覽器/應用程式和電子郵件用戶端時,可能會遇到問題。此外,由於驗證機制依賴電子郵件,電子郵件供應商的安全性較弱,可能會導致使用者帳戶面臨風險。
學習資源
網頁
如要在網站上整合密碼金鑰,請使用 Web Authentication API (WebAuthn)。如要瞭解詳情,請參閱下列資源:
- 建立密碼金鑰,讓使用者免密碼登入:這篇文章說明如何允許使用者為網站建立密碼金鑰。
- 透過表單自動填入功能使用密碼金鑰登入:這篇文章說明如何設計無密碼登入功能,同時兼顧現有密碼使用者的需求。
- 在網頁應用程式中透過表單自動填入功能導入密碼金鑰:這個程式碼研究室可協助您瞭解如何在網頁應用程式中透過表單自動填入功能導入密碼金鑰,打造更簡單安全的登入體驗。
- 協助使用者有效管理密碼金鑰:如要充分發揮密碼金鑰的潛力,必須仔細考量使用者管理密碼金鑰的體驗。本文將說明設計直覺式安全密碼管理系統的指南和選用功能。
- 安全無縫的密碼金鑰:部署檢查清單:這份檢查清單將引導您瞭解導入密碼金鑰的各個重要環節,以獲得最佳使用者體驗 (UX) 成果。
Android
如要在 Android 應用程式中整合密碼金鑰,請使用 Credential Manager 程式庫。如要瞭解詳情,請參閱下列資源:
- 透過 Credential Manager 讓使用者登入:這篇文章說明如何在 Android 上整合 Credential Manager。Credential Manager 是 Jetpack API,可在單一 API 中支援多種登入方式,例如使用者名稱/密碼、密碼金鑰和聯合登入解決方案 (例如使用 Google 帳戶登入)
- 透過 Credential Manager API,使用密碼金鑰在應用程式中提供順暢的驗證機制: 這篇文章說明如何在 Android 裝置上透過 Credential Manager 整合密碼金鑰。
- 瞭解如何在 Android 應用程式中使用 Credential Manager API 簡化驗證流程: 瞭解如何在應用程式中實作 Credential Manager API,讓使用者透過密碼金鑰或密碼順暢安全地進行驗證。
- 憑證管理員範例應用程式: 執行 Credential Manager 的範例程式碼,可支援密碼金鑰。
- 整合 Credential Manager 與憑證提供者解決方案 | Android 開發人員
使用者體驗
瞭解密碼金鑰使用者體驗建議: