FedCM 更新:Domain Hint API

在 Chrome 123 中,您可以使用網域提示Federated Credential Management API (FedCM)。取代為 透過 Domain Hint API 來說,開發人員只要安裝 顯示所接受網域的聯合登入帳戶。

網域提示 API

FedCM 可讓使用者輕鬆登入信賴方 (RP、 參照網站) 提供者 (IdP)。然而在某些情況下 RP 只會知道 與特定網域相關聯的帳戶可以登入該網站。這個 在企業環境中尤其常見,因為存取網站是在企業環境中 僅限於企業網域為了提供更優質的使用者體驗,FedCM API 可讓 RP 只顯示可用於登入 受限方。這可避免使用者嘗試使用 帳戶時,將只看到錯誤訊息 之後 (或關閉登入無效選項),因為使用者的 未使用該帳戶。

RP API 可讓 RP API 在 FedCM API 中指定 domainHint 屬性 呼叫,只顯示使用者相符的帳戶。IdP 可以提供 domain_hints 屬性在帳戶清單的回應中 端點 指出帳戶關聯的網域。這樣一來,瀏覽器 可以顯示相符的帳戶,而不揭露所要求網域提示 IdP 的 IP 位址。

帳戶清單端點的 JSON 回應範例如下所示 包括:

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

受限方可以使用 domainHint 屬性呼叫 navigator.credentials.get(),執行以下操作: 篩選帳戶舉例來說,假設使用者造訪 corp-partner.example 並 使用 corp.example 的帳戶登入。網站會以下列方式叫用 API 如下:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

domainHint 值未傳送至帳戶清單 端點 ,因為這可以是 IdP 的指紋向量。 而是會照常執行 FedCM 要求,並篩除 不符合domainHint navigator.credentials.get() 呼叫。接著,Chrome 會向 建立新的帳戶清單這個方法類似於登入提示 API,但這兩個 API 能回答不同的問題Login Hint API 的作用是 找到「我希望的使用者」 ID,而「網域提示」的目標是回答 公司或伺服器必須屬於此帳戶?」。

使用 domainHint: "any" 時,Chrome 會篩除沒有登入的帳戶 任何網域 (即 domain_hints 未傳遞或空白)。例如: 可使用此做法,在 RP 僅允許註冊客戶帳戶時使用 上傳資料集之後,您可以運用 AutoML 自動完成部分資料準備工作

如果沒有與 domainHint 相符的帳戶,FedCM 對話方塊會顯示登入提示。 這可讓使用者登入與要求提示相符的 IdP 帳戶 受限方。使用者輕觸提示後,系統會開啟彈出式視窗,其中顯示 設定中指定的登入網址 檔案。連結為 然後附加登入提示和網域提示查詢參數

如果沒有帳戶與 domainHint 相符,系統會顯示登入提示範例。
沒有任何帳戶符合 domainHint 時的登入提示範例。