發布日期:2025 年 8 月 19 日
WebAuthn 立即仲介是專為簡化使用者登入流程設計的全新網路功能。這項原始碼試用計畫將概略介紹這項功能、優點和實作詳細資料,邀請您參與並協助塑造網路驗證的未來。
背景
網頁上的驗證程序通常會造成阻礙,讓使用者登入時遇到困難。現有的 WebAuthn 流程雖然功能強大,但「登入」按鈕卻難以處理,尤其是在憑證無法立即使用時,導致標準表單備援。
這項新功能會導入低摩擦登入流程,類似於行動裝置上的 preferImmediatelyAvailableCredentials
API。這項功能可減少操作障礙並提升使用者體驗,簡化登入程序 (通常在標準登入表單之前)。
運作方式
WebAuthn 即時中介服務可提供更直接有效率的登入體驗。這項功能可讓瀏覽器立即提供可用憑證,或立即發出憑證不存在的信號,不必提示進行跨裝置或安全金鑰驗證,因此開發人員可輕鬆導入。
immediate
中介服務類型
我們即將推出 immediate
中介服務類型,適用於 navigator.credentials.get()
請求。設定這個選項後,如果找不到本機可用的憑證,承諾就會以 NotAllowedError
拒絕。如果存在憑證,瀏覽器會照常處理驗證程序。
網站可靈活調整登入流程,在無法立即提供憑證時,改用其他方法。
請注意,瀏覽器仍可傳回 NotAllowedError
,以維護使用者隱私權和安全性,避免指紋辨識或追蹤等問題。
特徵偵測
您可以使用 PublicKeyCredential.getClientCapabilities()
偵測是否可立即中介。開發人員可以檢查回傳的 capabilities
物件是否具備 immediateGet
功能。
async function checkImmediateMediationAvailability() {
try {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities.immediateGet && window.PasswordCredential) {
console.log("Immediate Mediation with passwords supported.");
} else if (capabilities.immediateGet) {
console.log("Immediate Mediation without passwords supported.");
} else { console.log("Immediate Mediation unsupported."); }
} catch (error) {
console.error("Error getting client capabilities:", error);
}
}
注意:如要擴大瀏覽器支援範圍,請從 WebAuthn Polyfills GitHub 存放區取得 getClientCapabilities()
的 Polyfill。
導入範例
如要使用 API,請使用 mediation:
'immediate'
呼叫 navigator.credentials.get()
。建議您在要求中加入 password: true
,因為大多數使用者目前可能都已儲存密碼,可立即享有這項體驗。
button.addEventListener('click', async (event) => {
event.preventDefault();
event.stopPropagation();
const cred = await navigator.credentials.get({
password: true,
publicKey: {
challenge, // Your server-generated challenge
rpId: 'example.com' // Your Relying Party ID
},
mediation: 'immediate',
});
});
開發人員應在 catch
區塊中處理 NotAllowedError
,以提供優雅的備用登入體驗。
立即中介服務的逐步流程
WebAuthn 即時調解支援兩種主要用途,可簡化使用者登入程序:啟用專用的「使用密碼金鑰登入」按鈕,隱藏不必要的備援選項;以及提供動態登入流程,在使用者執行重要動作前主動提供憑證。
用途 1:使用登入按鈕明確登入
這個情境的重點是提供專屬的登入按鈕,確保使用者體驗良好,不會出現非預期的提示或前往登入頁面。
- 使用者啟動登入程序:使用者點選「登入」按鈕。然後,信賴方會使用
mediation: "immediate"
呼叫navigator.credentials.get()
。 - 瀏覽器提示選取憑證 (如有):瀏覽器會檢查是否有任何本機可用的密碼金鑰或要求的密碼。如果找到任何帳戶,系統會立即顯示模式 UI,供使用者選擇帳戶。帳戶會依上次使用時間戳記排序,然後依字母順序排序。 注意:如果瀏覽器在多個密碼管理工具中,找到同一帳戶的密碼和密碼金鑰,會優先使用密碼金鑰。如果同一帳戶有多個來自不同供應商的密碼金鑰,系統會優先使用最後使用的密碼金鑰。
- 成功登入:使用者從瀏覽器 UI 選取密碼金鑰。如果瀏覽器需要驗證,系統會提示使用者透過先前設定的方法 (例如 PIN 碼、生物特徵辨識輸入或解鎖圖案) 驗證身分。順利完成登入程序。
- 備援路徑:沒有密碼金鑰或使用者關閉:如果網站沒有可用的本機密碼金鑰或要求密碼,或是使用者關閉瀏覽器 UI,瀏覽器會向信賴方擲回
NotAllowedError
,且不會顯示任何跨裝置或安全金鑰選項的 UI。接著,信賴方可以繼續使用標準登入頁面,或提供替代驗證機制。
應用情境 2:使用者動作前的隱含登入流程
這個情境可提供主動登入體驗,在使用者執行需要驗證狀態的動作 (例如結帳) 前,提供密碼金鑰和密碼。
- 使用者發起需要登入的動作:使用者點選需要登入才能執行的動作按鈕 (例如「結帳」按鈕)。然後,信賴方會使用
mediation: "immediate"
呼叫navigator.credentials.get()
。 瀏覽器提示選取憑證 (如有):瀏覽器會檢查是否有任何可用的本機密碼金鑰或密碼。如果找到這些項目,系統會立即顯示模式 UI,供使用者選擇帳戶。系統會依據上次使用時間戳記排序帳戶,然後依字母順序排序,並進行重複資料刪除,每個帳戶只會顯示一個項目。注意:如果系統在多個密碼管理工具中找到同一帳戶的密碼和密碼金鑰,瀏覽器會優先使用密碼金鑰。如果同一帳戶有多個來自不同供應商的密碼金鑰,系統會優先使用最近使用的密碼金鑰。
成功登入:使用者從瀏覽器 UI 選取憑證。如果瀏覽器需要驗證,系統會提示使用者使用先前設定的方法 (例如 PIN 碼、生物特徵辨識輸入或解鎖圖案) 驗證身分。順利完成登入程序。
備用路徑:沒有憑證或使用者關閉:如果網站沒有可用的本機憑證,或使用者關閉瀏覽器 UI,瀏覽器會向信賴方擲回
NotAllowedError
,且瀏覽器不會顯示任何 UI。使用者登入體驗與目前相同。然後,信賴方可以要求使用者提供更多詳細資料 (例如電子郵件地址),或顯示替代驗證機制,例如密碼表單、簡訊驗證或支援跨裝置驗證器的 WebAuthn 模式要求。
優點
WebAuthn 即時調解可為開發人員和使用者帶來多項主要優勢:
- 流暢的登入體驗:如果使用者有可立即使用的密碼金鑰,或是在瀏覽器或密碼管理工具中儲存密碼,就能享有更流暢、更輕鬆的登入體驗。
- 智慧登入:如果使用者想執行需要登入的活動,API 會啟用登入流程。這些項目會根據使用者的憑證狀態智慧調整。盡可能提供即時驗證,避免不必要的重新導向,並簡化流程。
- 改善憑證管理功能:如果多個密碼管理工具提供相同帳戶的憑證,瀏覽器會智慧選取最合適的選項,簡化使用者的憑證管理作業。
- 減少使用者困惑:直接顯示已知憑證,可減少使用者在多個登入選項或標準表單中感到困惑的情況。
- 流暢的備援機制:如果使用者沒有立即可用的憑證,系統會流暢地備援至標準登入頁面,因此使用者體驗與目前的流程相同。
隱私權與安全性
WebAuthn 即時仲介功能可讓網站在使用者明確授權登入嘗試前,識別出可立即使用的憑證。為保護使用者隱私權及防範潛在的濫用行為,我們採取了幾項重要措施:
- 使用者手勢規定:API 呼叫需要使用者手勢 (任何暫時性使用者啟用)。這會讓網站難以進行無聲探查和指紋辨識。
- 無痕和私人工作階段:在無痕或私人工作階段中,任何即時中介服務請求都會擲回
NotAllowedError
。 allowCredentials
清單的限制:使用allowCredentials
清單的要求會擲回NotAllowedError
。這樣一來,網站就無法推斷使用者互動記錄,或跨工作階段追蹤使用者。- 取消:在要求中設定
signal
參數並立即中介服務無效。這樣一來,網站就無法透過程式輔助方式關閉任何瀏覽器 UI。
立即試用
建議您試用 WebAuthn 即時仲介功能。
Chrome 中的狀態
這項功能正在 Chromium 開發週期中逐步推進:
- 電腦:Chrome 136 的開發人員試用,以及 Chrome 139 至 141 的來源試用。
- Android:Chrome 140 中的開發人員試用版。
適用於本機測試
如要在本機測試 WebAuthn 即時中介服務,請按照下列步驟操作:
- 下載 Chrome 139:在桌機上取得並開啟最新版 Chrome。
- 啟用「立即中介服務」旗標:前往網址列中的
chrome://flags/#web-authentication-immediate-get
,然後啟用「Web Authentication Immediate Get」旗標。 - 準備憑證:確認您已儲存可用的密碼金鑰和密碼:
- 儲存在 Google 密碼管理工具中的密碼。
- 儲存在 Google 密碼管理工具的密碼金鑰 (必須登入並將 Chrome 與 Google 帳戶同步)、Windows Hello 或 iCloud 鑰匙圈。
公開測試 (來源試用)
如要在公開環境中,透過來源試用測試 WebAuthn 即時中介服務,請按照下列步驟操作:
- 註冊:前往 Chrome 來源試用頁面,並註冊「WebAuthn immediate mediation」試用。
- 在 HTTP 標頭中加入權杖:在網站的 HTTP 標頭中加入提供的原始碼試用權杖:
HTML Origin-Trial: [YOUR_TRIAL_TOKEN]
注意:您也可以使用 JavaScript 以程式輔助方式提供權杖。
測試情境
我們提供參考實作,建議您自行建構原型,測試各種情境。
- 參考範例:您可以在
https://deephand.github.io/webauthn-immediate-demo/
試用參考實作方式。- 導入原型:在網站上導入原型時,請務必在使用者點按 (例如「登入」按鈕,或任何需要使用者登入的互動) 後,使用
mediation: 'immediate'
進行navigator.credentials.get()
呼叫。
- 導入原型:在網站上導入原型時,請務必在使用者點按 (例如「登入」按鈕,或任何需要使用者登入的互動) 後,使用
- 流程 1:不使用密碼或密碼金鑰登入:如果沒有網站適用的密碼金鑰或密碼,按一下「登入」會直接前往標準登入頁面,不會顯示瀏覽器使用者介面。
- 流程 2:使用可立即使用的本機密碼金鑰登入:如果網站已儲存密碼金鑰,按一下「登入」應會觸發「立即仲介」使用者介面,提供密碼金鑰供選取。
- 流程 3:使用本機密碼金鑰或密碼登入:如果您同時儲存密碼金鑰和密碼,請啟用「要求密碼」選項 (在程式碼中設定
password: true
)。點選「登入」後,立即中介服務 UI 應會提供密碼金鑰和密碼選項。