Chrome 支援 FedCM 的自動重新驗證機制
Federated Credential Management API (FedCM) 是用於隱私權保護身分聯盟的 Web API。使用身分聯盟時,RP (依賴方) 依賴 IdP (識別資訊提供者) 來提供使用者帳戶,而不需要求新的使用者名稱和密碼。
FedCM 可讓瀏覽器瞭解 RP 和 IdP 交換資訊時的狀況。這會通知使用者共用的資訊和權限層級,並防止意外遭到濫用。自 108 版起,Chrome 開始提供 FedCM。
在 Chrome 115 版中,FedCM 將支援自動重新驗證,藉此改善使用者體驗,並在初次同意後以更簡單的方式重新驗證 RP。
自動重新驗證
目前,使用者透過 FedCM API 使用 FedCM API 建立 RP 上的聯合帳戶後,下次造訪該網站時,就必須在使用者介面中完成相同的步驟。這表示使用者必須明確且手動重新確認,才能重新驗證並繼續進行登入流程。
雖然在使用者建立聯合帳戶防止追蹤 (FedCM 的主要目標之一) 之前,明確的使用者體驗才顯得合理,但在使用者完成一次授權後,這是非常麻煩的一點:在使用者授予 RP 和 IdP 之間的通訊權限後,使用者已明確同意執行 RP 與 IdP 之間的通訊,並不會對隱私權或安全性有所助益。因此,我們推出更精簡的使用者體驗,讓 RP 能夠為回訪者選擇更流暢的體驗。
透過 FedCM 自動重新驗證 (簡稱「auto-reauthn」) 可讓使用者在初次使用 FedCM 完成初始驗證後,自動重新驗證。此處的「初始驗證」是指使用者在同一個瀏覽器執行個體上首次輕觸 FedCM 登入對話方塊中的「Continue as...」按鈕,藉此建立帳戶或登入 RP 網站。
![使用者輕觸以建立帳戶或驗證的對話方塊。](https://developers.google.cn/static/privacy-sandbox/assets/images/blog/a-dialog-user-taps-to-c-c86e154d4a899.png?authuser=6&hl=zh-tw)
選擇自動重新驗證的選項
雖然我們推出自動重新驗證功能,藉此提供更優質的使用者體驗,並讓應用程式符合規格要求,但預設使用者體驗不會有任何程式碼變更。啟用自動重新驗證後,瀏覽器會根據開發人員在 navigator.credentials.get()
提供的 mediation
選項中選取的選項,變更其行為。
const cred = await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/fedcm.json",
clientId: "1234",
}],
},
mediation: 'optional', // this is the default
});
mediation
是 Credential Management API 中的屬性,其行為相同與 PasswordCredential 和 FederatedCredential 的運作方式相同,另外還有PublicKeyCredential 獲得部分支援。此屬性接受下列四個值:
'required'
:一律要求中介服務才可繼續操作,例如按一下使用者介面上的「繼續」按鈕。如果使用者每次需要進行驗證時,都會明確授予權限,請選擇這個選項。'optional'
(預設):盡可能自動重新驗證;如果不是,則必須提供中介服務。建議您在登入頁面上選擇這個選項。'silent'
:如果可能,自動重新驗證;如果沒有,則在不要求中介服務的情況下失敗。建議您在專屬登入頁面以外的其他頁面中選擇此選項,例如運送網站上的商品頁面或新聞網站的文章頁面。'conditional'
:用於 WebAuthn,且目前不適用於 FedCM。
在此呼叫中,系統會在下列情況下自動重新驗證:
- 可以使用 FedCM。例如,使用者尚未全域停用 FedCM,或設定中未針對 RP 停用 FedCM。
- 使用者只使用一個具備 FedCM API 的帳戶,在這個瀏覽器中登入網站。
- 使用者已使用該帳戶登入 IdP。
- 過去 10 分鐘內未執行自動重新驗證。
- 上次登入後,RP 未呼叫
navigator.credentials.preventSilentAccess()
。
當符合上述條件時,會嘗試在叫用 FedCM navigator.credentials.get()
後立即自動重新驗證使用者。
使用 preventSilentAccess()
強制執行中介服務
當使用者登出後立即進行自動重新驗證,並不會帶來良好的使用者體驗。這也是為什麼 FedCM 在自動重新驗證後會有一個 10 分鐘的靜止期,以防止這種行為發生。這表示自動重新驗證最多每 10 分鐘最多只會執行一次,除非使用者在 10 分鐘內重新登入。RP 應呼叫 navigator.credentials.preventSilentAccess() 並明確要求瀏覽器在使用者明確登出 RP 時 (例如點選登出按鈕) 停用自動重新驗證。
function signout() {
navigator.credentials.preventSilentAccess();
location.href = '/signout';
}
使用者可以在「設定」中停用自動重新驗證
使用者可以透過設定選單選擇不採用自動重新驗證功能:
- 在電腦版 Chrome 中,依序前往
chrome://password-manager/settings
> 自動登入。 - 在 Android Chrome 中,依序開啟「設定」 >「密碼管理工具」 > 依序輕觸右上角的齒輪 >「自動登入」。
停用切換按鈕之後,使用者就能完全停用自動重新驗證行為。如果使用者已在 Chrome 執行個體上登入 Google 帳戶,且已啟用同步功能,這項設定就會儲存並同步到所有裝置。
提供意見
如果您測試的是 FedCM,可以在 crbug.com 的元件底下,透過 「Blink>Identity>FedCM」提供意見回饋或意見回饋。
Noah Samuel Franz 在 Unsplash 上提供的相片