使用 FedCM 進行無縫且私密的驗證:Seznam 的做法

Natalia Markoborodova
Natalia Markoborodova

發布日期:2025 年 9 月 8 日

各行各業的領導者都瞭解,在提供優質使用者體驗的同時保護隱私權有多重要。Seznam 致力於提供不打折的使用者體驗和隱私權,並成功整合了聯合憑證管理 (FedCM)。

可從 FedCM 受惠的公司

各領域的機構都將 FedCM 整合至解決方案。由於 FedCM 是為聯合身分識別管理而設計,因此身分識別提供者 (IdP) 是主要受益者。他們會使用這項資訊提供更優質的登入體驗。電子商務服務供應商和付款服務供應商 (其中許多也擔任身分識別資訊提供者),也發現可透過 FedCM 改善使用者體驗的機會。

Seznam

Seznam 是歐洲科技公司和身分提供者,觸及 90% 的捷克人口。做為社交、知識和內容中心。Seznam 採用 FedCM,讓在合作夥伴平台經營網路商店的客戶,可以使用 Seznam 帳戶登入。

eshop.starkl.com 上的 FedCM 對話方塊,提示使用者登入 Seznam 帳戶。
FedCM 對話方塊,提示使用者在合作夥伴的網站上使用 Seznam 登入。

採用 FedCM 後,Seznam 的合作夥伴聯播網使用者登入率大幅提升,使用者體驗也獲得改善,而且無論第三方 Cookie 是否可用,都能提供一致的 ID 流程。

動機

Seznam 選擇導入 FedCM,是因為這項技術有幾項公認的優點:

  • FedCM 的設計以使用者為中心,讓使用者控管提供給 IdP 的資訊。這與 Seznam 為使用者提供安全私密環境的願景一致。
  • FedCM 是內建的瀏覽器功能,與 Seznam 現有的登入體驗相容,後者採用 OAuth 2.0 標準。
  • FedCM 是一種以隱私權為重的身分聯盟方法。舉例來說,如果使用者登入,系統只會與 IdP 分享使用者造訪 RP 的資訊。這與 Seznam 對永續經營的看法一致。

實作詳情

Seznam 在現有的 OAuth 解決方案上導入 FedCM 做為一層。在這個架構中,FedCM 流程會將 OAuth 授權碼從 IdP 安全地傳輸至 RP。

FedCM 流程,顯示在 IdP 端交換 FedCM 權杖以取得 OAuth 授權碼
與 OAuth 整合的 FedCM 流程。請參閱圖表程式碼

導入難易度

Seznam 發現 FedCM 實作方式簡單明瞭,且與現有做法一致。這項研究和 API 實作作業歷時一個月,需要兩名開發人員。我們在不到兩個月內就將 FedCM 投入生產。這個過程是反覆進行的,我們花費大量時間研究 API。

挑戰

Seznam 是早期採用者,他們發現了幾項挑戰,並提供寶貴意見,協助我們改善 API。

支援多個身分識別提供者

Seznam 對 FedCM 支援多個識別資訊提供者這點很感興趣。這項功能的目的是讓使用者在合作夥伴 RP 上選擇 Seznam 或 Google 帳戶。不過,Seznam 剛開始導入 FedCM 時,這項功能還處於早期實作階段,開發人員必須註冊原始碼試用,並使用權杖為使用者啟用這項功能。因此,Seznam 選擇等待這項功能在 Chrome 穩定版中推出。

這項功能適用於 Chrome 136 以上版本,開發人員可以設定支援多個身分識別提供者。舉例來說,如要同時支援 Seznam 和 Google 識別資訊提供者,IdP 可以在單一 get() 呼叫中加入這兩個提供者,RP 也可以獨立執行這項操作:

  // Executed on the RP's side:
    const credential = await navigator.credentials.get({
      identity: {
        providers: [
          {
            // IdP1: Seznam config file URL
            configURL: 'https://szn.cz/.well-known/web-identity',
            clientId: '123',
          },
          {
            // Allow Google Sign-in
            configURL: 'https://accounts.google.com/gsi/fedcm.json',
            clientId: '456',
          },
        ],
      },
    });

Seznam 表示這項功能將納入其解決方案。此外,FedCM 團隊也實作了多個 SDK 的支援功能,支援多個 get() 呼叫。

私人 DNS

在測試階段,Seznam 遇到與網路設定相關的挑戰。該公司測試用的 IdP 伺服器位於私人網路中,只能透過私人 DNS 存取。在公開曝光前,內部測試和開發環境通常會採用這種設定。

不過,這種設定會導致一個問題:由於 well-known 檔案必須從 eTLD+1 提供,而私有開發網域並未在 Public Suffix List 中註冊,因此瀏覽器不會傳送要求,擷取開發網域上代管的 well-known 檔案:

  • login.idp.example:例如正式版網域。
  • idp.example/.well-known/web-identity:出示文件中的範例 well-known 檔案。
  • login.dev.idp.example:例如開發網域。
  • login.dev.idp.example/.well-known/web-identity:開發環境中的 well-known 檔案範例。

如果 FedCM 實作項目是代管在私人網域上,瀏覽器對 well-known 檔案的要求會導致這項錯誤:

The fetch of the well-known file resulted in a network error: ERR_NAME_NOT_RESOLVED

啟用 Chrome #fedcm-without-well-known-enforcement 旗標即可解決這項錯誤。啟用這項標記後,瀏覽器會略過擷取 well-known 檔案,以利進行測試。瞭解如何在 Chrome 中啟用測試旗標

自訂資訊揭露聲明

Seznam 也想在初始 FedCM UI 設計中加入額外資訊。標準 FedCM 對話方塊會向使用者顯示固定訊息,說明特定資料 (通常是使用者的個人資料相片、姓名和電子郵件地址) 會與 RP 共用。

FedCM 團隊已納入意見回饋,並擴充 API,讓您自訂向使用者顯示的揭露事項。舉例來說,透過「繼續」功能,IdP 可以將使用者重新導向至自訂頁面,要求提供其他資訊或權限。自 Chrome 132 起,系統支援自訂參數欄位功能,可進一步自訂。

IdP 頁面顯示使用者必須授予額外權限才能繼續進行 FedCM 註冊,例如查看及下載雲端硬碟檔案和日曆活動。
使用者可以透過 `Parameters` API,查看並授予 RP 傳遞至ID 聲明端點的其他權限。

信賴憑證者來源驗證

IdP 伺服器必須驗證傳入 FedCM 要求中的 Origin HTTP 標頭,確保要求符合 RP 向 IdP 預先註冊的來源。這可確保 FedCM ID 聲明要求來自授權 RP,而非使用 client_id 的攻擊者。

Seznam 有一個特殊情況:合作夥伴 RP 向 Seznam 註冊時,不會要求 RP 的來源資料。這表示系統無法驗證 RP 的來源。

Seznam 的 FedCM 整合功能是以現有的 OAuth 解決方案為基礎建構而成。為確保解決方案安全無虞,該團隊採取替代做法,同時驗證 RP 的 client_idclient_secret,而不檢查來源。

識別資訊提供者面向使用者的網域

Seznam 的使用者驗證基礎架構主要在 szn.cz 網域運作,該網域會代管 FedCM 的必要 IdP 端點。不過,該公司主要的公司身分和網域是 seznam.cz,使用者普遍透過這個網域認識並信任該公司的服務。

FedCM 對話方塊會顯示 IdP 端點的實際來源網域:szn.cz。如果使用者熟悉 seznam.cz 品牌,在登入過程中看到系統提示要使用較不熟悉的 szn.cz 網域登入時,可能會感到困惑並猶豫不決。

從 Chrome 141 版起,FedCM 不允許顯示與 IdP 實作代管網域不同的網域。這項限制是刻意設計的選擇,旨在確保使用者資訊公開透明。不過,FedCM 團隊瞭解這項限制可能造成的挑戰,目前正在討論可能的調整措施。

影響

Seznam 現在可透過 FedCM API,為合作夥伴使用者提供單次輕觸授權流程。並強調 FedCM 的使用者體驗優於其他驗證方法。

Seznam 發現改用 FedCM 登入後,網站的使用者參與度顯著提升,但未進行全面分析,因此無法排除其他因素的影響,準確判斷直接影響。整合 FedCM 前,實作方式允許使用同意的雜湊電子郵件進行使用者識別,以進行訪客結帳。進行這類分析時,最大的挑戰在於評估使用者轉換是否可歸因於 FedCM,或是使用者是否會使用訪客結帳完成購買。Seznam 的假設指出,FedCM 的易用性提升可能是轉換率提高的原因。

結論

Seznam 成功導入 FedCM,在現有的 OAuth 解決方案之外,提供替代授權流程。雖然 Seznam 在實作 API 時,面臨一些與身分識別提供者支援、私人 DNS 設定、揭露文字自訂、信賴方來源驗證和面向使用者的網域顯示相關的挑戰,但 API 自實作以來已趨於成熟。FedCM 團隊已納入 Seznam 和其他早期採用者的意見,提供更完善的工具來解決這些挑戰。下一步,Seznam 打算實作 FedCM,支援多個身分識別提供者。