FedCM 更新:取消連結 API 和兩項更新

在 Chrome 122 中,適用於聯盟憑證的 Disconnect API Management API (FedCM)。 中斷連線 API 可讓依賴方中斷使用者與 身分提供者的帳戶。另外, FedCM 的同站處理功能有幾項更新。

取消連結 API

當使用者透過依賴方 (RP) 建立帳戶時,系統會使用 用於驗證的識別資訊提供者) 供應商 (IdP,即提供驗證和帳戶資訊的服務) 通訊端) 通常會在其伺服器上記錄連線。儲存的 連線後,IdP 就能追蹤使用者登入的 RP, 以及改善使用者體驗例如,要在使用者 使用者稍後返回 RP,則系統會將 IdP 的使用者帳戶視為 返回帳戶,即提供自動重新驗證、 個人化按鈕,顯示目前使用的帳戶。

有時 IdP 會提供 API,用於將帳戶與 RP 取消連結。不過, 中斷連線流程經過驗證,並需要 IdP Cookie。小知識 沒有第三方 Cookie,當使用者造訪 RP 時,沒有瀏覽器 這個 API 可讓 RP 與 IdP 中斷連線。因為可能有多個 IdP 如果帳戶來自與指定 RP 相同的 IdP 帳戶,則中斷流程 以便瞭解哪些帳戶正在中斷連結。

斷層 API 可讓使用者也可以在瀏覽器中將 IdP 帳戶與 RP 取消連結 與 IdP 伺服器通訊,以傳送至指定端點。使用者需要 透過「聯邦憑證」 Management API (FedCM)。使用者中斷連線後,系統會將其視為新的 使用者下次嘗試使用 IdP 登入 RP 時。

將 IdP 與 RP 中斷連線

如果使用者先前已透過 FedCM 使用 IdP 登入 RP, 瀏覽器在本機上記住這個關係 帳戶。受限方可透過叫用 IdentityCredential.disconnect() 函式。您可以從 頂層 RP 影格RP 必須傳遞 configURL,也就是所用的 clientId (位於 IdP 之下),以及要中斷 IdP 連線的 accountHint。帳戶 提示可以是任意字串,只要中斷連線端點可以識別 像是電子郵件地址或使用者 ID (不一定) 與帳戶清單端點提供的帳戶 ID 相符:

// Disconnect an IdP account "account456" from the RP "https://idp.com/". This is invoked on the RP domain.
IdentityCredential.disconnect({
  configURL: "https://idp.com/config.json",
  clientId: "rp123",
  accountHint: "account456"
});

IdentityCredential.disconnect() 會傳回 Promise。這麼做可能會擲回 例外狀況:

  • 使用者尚未透過 FedCM 使用 IdP 登入 RP。
  • 這個 API 是從沒有 FedCM 權限政策的 iframe 中叫用。
  • configURL 無效,或缺少中斷連線的端點。
  • 無法執行內容安全政策 (CSP) 檢查。
  • 目前有待處理的取消連結要求。
  • 使用者在瀏覽器設定中停用 FedCM。

IdP 中斷連線的端點傳回 回應,RP 和 IdP 與 問題就會解決取消連結的使用者帳戶 端點

設定 IdP 設定檔

IdP 必須支援中斷連線 API,才能支援 Connected API。 並在 IdP 提供 disconnect_endpoint 屬性及其路徑 設定檔

{
  "accounts_endpoint": "/accounts",
  "id_assertion_endpoint": "/assertion",
  ...
  "disconnect_endpoint: "/disconnect"
}

在中斷連線的端點上取消帳戶連結

透過叫用 IdentityCredential.disconnect() 時,瀏覽器會傳送跨來源 含有 Cookie 和內容類型的 POST 要求 將 application/x-www-form-urlencoded 連結至這個端點與 以下資訊:

屬性 說明
account_hint IdP 帳戶的提示。
client_id 受限方的用戶端 ID。
POST /disconnect HTTP/1.1
Host: idp.example
Origin: rp.example
Content-Type: application/x-www-form-urlencoded
Cookie: 0x123
Sec-Fetch-Dest: webidentity

account_hint=account456&client_id=rp123

收到要求後,IdP 伺服器應:

  1. 使用 CORS (跨源資源) 回應要求 分享)
  2. 確認要求包含 Sec-Fetch-Dest: webidentity HTTP 標頭。
  3. Origin 標頭與 client_id 判定的受限方來源進行比對。 如果不相符,則拒絕。
  4. 找出與 account_hint 相符的帳戶。
  5. 將使用者帳戶與 RP 的連結帳戶清單取消連結。
  6. 以 JSON 格式以識別使用者的 account_id 回應瀏覽器 格式。
,瞭解如何調查及移除這項存取權。

回應 JSON 酬載的範例如下所示:

{
  "account_id": "account456"
}

如果 IdP 希望瀏覽器改為中斷所有與 相關聯的帳戶連線 受限方,請傳遞與任何帳戶 ID 都不相符的字串,例如 "*"

現在 RP 和 IdP 相同時,系統會略過檢查 /.well-known/web-identity

開發 FedCM 系統時,測試或預備 RP 伺服器網域 兩個網域的子網域。例如正式環境 IdP 伺服器 位於 idp.example,以及暫存 RP 伺服器和暫存 IdP 伺服器 位於 staging.idp.example。不過,由於必須放置已知檔案 位於 IdP 伺服器的 eTLD+1 根層級 idp.example/.well-known/web-identity,而這就是實際執行伺服器。開始時間 開發人員不一定能將檔案 環境,因此他們無法測試 FedCM。

從 Chrome 122 開始,如果 RP 網域和 IdP 網域相同,Chrome 略過檢查已知檔案的程序這樣開發人員就能 這種情境

子資源現在可以設定同網站登入狀態

Chrome 先前只能讓您設定登入帳戶 狀態 (針對 例如使用 Set-Login: logged-in 標頭),如果要求是 same-origin 與所有的祖系這會導致使用者無法透過 相同網站 fetch() 要求設定登入狀態。

例如,假設某個網站可讓使用者輸入使用者名稱 密碼在 idp.example 上,但憑證已發布至 login.idp.example 搭配 fetch()。使用登入狀態記錄瀏覽器登入狀態 因為兩個網域屬於跨來源和相同網站,因此無法 API。

這項異動生效後,我們將 Login Status API 的需求放寬為 同網站 同時讓上述範例 login.idp.example 的登入狀態使用 HTTP 標頭 (Set-Login: logged-in)。

摘要

FedCM 現在可以透過 中斷連線 API,將 RP 與 IdP 取消連結 不必仰賴第三方 Cookie方法是呼叫 受限方:IdentityCredential.disconnect()。有了這項功能 傳送要求至 IdP 的中斷連線端點,以便 IdP 終止 連線,然後在瀏覽器中。

我們已宣布,在 RP 降低時,系統會略過 /.well-known/web-identity 檢查 和 IdP 是相同網站,用於測試。此外,設定登入資訊 透過 HTTP 回應標頭 (來自相同網站 IdP 子資源) 傳遞狀態