瞭解如何將密碼金鑰整合至服務。
密碼金鑰系統剖析
密碼金鑰系統由幾個元件組成:
- 依賴方:在密碼金鑰結構定義中,依賴方 (簡稱 RP) 會處理密碼金鑰的核發和驗證作業。RP 必須運作用戶端,即建立密碼金鑰或使用密碼金鑰進行驗證的網站或應用程式,以及用於註冊、儲存及驗證用戶端密碼金鑰產生的憑證的伺服器。密碼金鑰行動應用程式必須使用 OS 提供的關聯機制 (例如 Digital Asset Links) 與 RP 伺服器網域繫結。
- 驗證器:手機、平板電腦、筆記型電腦或桌上型電腦等運算裝置,可使用作業系統提供的螢幕鎖定功能建立及驗證密碼金鑰。
- 密碼管理工具:在使用者裝置上安裝的軟體,提供、儲存及同步處理密碼金鑰,例如 Google 密碼管理工具。
註冊流程
使用網站上的 WebAuthn API 或 Android 應用程式的 Credential Manager 程式庫,即可建立及註冊新的密碼金鑰。
如要建立新的密碼金鑰,請提供幾個重要元件:
- RP ID:以網域的形式提供依賴方 ID。
- 使用者資訊:使用者的 ID、使用者名稱和顯示名稱。
- 要排除的憑證:與先前儲存的密碼金鑰相關的資訊,以防止重複註冊。
- 密碼金鑰類型:指定使用裝置本身 (「平台驗證器」) 做為驗證器或可卸離的安全金鑰 (「跨平台 / 漫遊驗證工具」)。此外,呼叫端也可以指定是否要讓憑證可供偵測,以便使用者選取要登入的帳戶。
一旦 RP 要求建立密碼金鑰,且使用者透過螢幕鎖定進行驗證,系統就會建立新的密碼金鑰,並傳回公開金鑰憑證。請將該檔案傳送至伺服器,並儲存憑證 ID 和公開金鑰,以便日後驗證。
想進一步瞭解如何建立及註冊密碼金鑰,請參閱下列文章:
- 網頁版:為無密碼登入建立密碼金鑰
- Android 裝置:使用 Credential Manager API,使用密碼金鑰在應用程式中提供順暢的驗證機制
驗證流程
在網站上使用 WebAuthn API 或 Android 應用程式中的 Credential Manager 程式庫,以使用已註冊的密碼金鑰進行驗證。
如要使用密碼金鑰進行驗證,你必須提供幾個關鍵元件:
- RP ID:以網域的形式提供依賴方 ID。
- 挑戰:由伺服器產生的驗證問題可防止重送攻擊。
一旦 RP 要求使用密碼金鑰進行驗證,且使用者以螢幕解鎖方式進行驗證,系統就會傳回公開金鑰憑證。請將該檔案傳送至伺服器,並使用儲存的公開金鑰驗證簽名。
深入瞭解如何使用密碼金鑰進行驗證:
伺服器端整合
建立密碼金鑰後,伺服器需要提供金鑰參數,例如驗證方式、使用者資訊、要排除的憑證 ID 等。接著驗證從用戶端傳送且已建立的公開金鑰憑證,並將公開金鑰儲存在資料庫中。如要以密碼金鑰進行驗證,伺服器必須謹慎驗證憑證及驗證簽名,讓使用者能夠登入。
詳情請參閱伺服器端指南:
現有 (舊版) 驗證機制
如果現有服務支援密碼金鑰,系統就不會再從舊版驗證機制 (例如將密碼轉換為密碼金鑰) 進行轉換。我們知道,您一定會盡快刪除較弱的驗證方法,但這可能會讓使用者感到困惑,或浪費部分使用者。我們建議您暫時保留現有的驗證方法。
這有幾個原因:
- 使用者所在環境與密碼金鑰不相容:現在對密碼金鑰的支援範圍已大幅擴及其他作業系統和瀏覽器,但舊版使用者目前還無法使用密碼金鑰。
- 密碼金鑰生態系統尚未成熟:密碼金鑰生態系統正在演進。不同環境之間的使用者體驗細節和技術相容性有利於改善。
- 使用者可能還無法使用密碼金鑰:有些人對新事物有些猶豫不決。隨著密碼金鑰生態系統日漸成熟,他們將瞭解密碼金鑰的運作方式,以及密碼金鑰實用的原因。
重新檢查現有的驗證機制
雖然密碼金鑰能讓驗證方式更加簡單安全,但保留舊機制的方式就像留下資料缺口。建議您重新審視並改善現有的驗證機制。
密碼
對使用者而言,建立高強度密碼及管理每個網站並不容易。強烈建議您使用系統內建的密碼管理工具或獨立服務。網站和應用程式只要稍微調整登入表單,就能大幅提升安全性和登入體驗。查看調整方式的方法:
- 登入表單最佳做法 (網頁)
- 註冊表單最佳做法 (網站)
- 透過 Credential Manager 讓使用者登入 (Android)
雙重驗證
雖然使用密碼管理員可協助使用者處理密碼,但並非所有人都會使用。為了保護這類使用者,常見的做法是要求提供稱為動態密碼 (OTP) 的額外憑證。動態密碼通常是透過電子郵件、簡訊或驗證器應用程式 (例如 Google Authenticator) 提供。由於動態密碼 (OTP) 通常是動態產生的簡短文字,只在限定期間內有效,因此可降低帳戶遭盜用的機率。這些方法不如密碼金鑰可靠,但比讓使用者光臨密碼更佳。
如果您選擇簡訊做為傳送動態密碼的方式,請參考下列最佳做法,簡化輸入動態密碼的使用者體驗。
- 簡訊動態密碼表單最佳做法 (網站)
- 使用 SMS Retriever API 自動傳送簡訊驗證 (Android)
身分聯盟
身分聯盟是另一個讓使用者輕鬆安全登入的選擇。透過身分識別聯盟,網站和應用程式可讓使用者透過第三方識別資訊提供者的使用者身分登入。例如,使用 Google 帳戶登入功能可以為開發人員帶來絕佳轉換效果,而且使用者也較容易偏好使用密碼進行驗證。身分聯盟與密碼金鑰相輔相成。以網站或應用程式身分註冊是絕佳做法,只需一個步驟即可取得使用者的基本個人資訊,而密碼金鑰則適合用於簡化重新驗證程序。
請注意,Chrome 在 2024 年淘汰第三方 Cookie 後,部分身分識別聯盟系統可能會因建構方式而受到影響。為降低影響,我們正在開發名為 Federated Credential Management API (FedCM) 的新瀏覽器 API。如果您經營識別資訊提供者,請參閱詳細資訊,確認是否需要採用 FedCM。
- Federated Credential Management API (網路、FedCM)
- 「使用 Google 帳戶登入」網頁版總覽 (網頁、使用 Google 帳戶登入)
- Android 上的 One Tap 登入總覽 (Android、One Tap 登入)
「魔術連結」
魔術連結登入是一種驗證方法,服務會透過電子郵件傳送登入連結,讓使用者只要點按該連結,就能自行進行驗證。雖然這有助於使用者在不記住密碼的情況下登入,但是在瀏覽器/應用程式和電子郵件用戶端之間切換時會很方便。此外,由於驗證機制依賴於電子郵件,電子郵件供應商的防護力弱點可能會讓使用者的帳戶面臨風險。
學習資源
Web
如要將密碼金鑰整合至您的網站,請使用 Web Authentication API (WebAuthn)。如要進一步瞭解,請參閱下列資源:
- 建立用於無密碼登入的密碼金鑰:說明如何允許使用者建立網站密碼金鑰的文章。
- 透過表單自動填入功能使用密碼金鑰登入:這篇文章說明在設計現有密碼使用者時,應如何使用密碼金鑰登入無密碼登入。
- 在網頁應用程式中使用表單自動填入功能實作密碼金鑰:這個程式碼研究室可讓您瞭解如何在網頁應用程式中,使用表單自動填入功能實作密碼金鑰,打造更簡單安全的登入體驗。
- 瞭解如何在網頁應用程式中使用表單自動填入功能實作密碼金鑰:這部研討會影片介紹了程式碼研究室的「在網頁應用程式中使用表單自動填入功能實作密碼金鑰」,說明如何在網頁應用程式中使用表單自動填入功能實作密碼金鑰,打造更簡單安全的登入體驗。
- 建構第一個 WebAuthn 應用程式:這個程式碼研究室可讓您瞭解如何在網站上使用密碼金鑰,建構簡易的重新驗證功能。
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,使用密碼金鑰或密碼在應用程式中提供順暢安全的驗證。
- Credentials Manager 範例應用程式:執行 Credential Manager 共用密碼金鑰的程式碼範例。
- 整合 Credential Manager 與憑證提供者解決方案 | Android 開發人員
使用者體驗
瞭解密碼金鑰使用者體驗建議: