FedCM 更新:Domain Hint API

从 Chrome 123 开始,您可以使用网域提示Federated Credential Management API (FedCM)。包含 通过 Domain Hint API,开发者可以提供更好的用户体验, 显示他们接受的网域中的联合登录账号。

域提示 API

FedCM 可让用户更轻松地登录信赖方 (RP、 使用由某个身份提供的账号信息) 提供方 (IdP)。不过,在某些情况下,RP 已经知道 与特定域关联的账号可以登录此网站。这个 在需要访问网站时 限制在公司域内。为了提供更好的用户体验 API 允许 RP 仅显示可用于登录 RP这样可以防止用户尝试使用 (与公司域外部)相关联的账号,只会提供错误消息 (或让登录失败的地方保持静音),因为 账号未被使用。

借助 Domain Hint API,RP 可以在 FedCM API 中指定 domainHint 属性 调用来仅显示与用户匹配的账号。IdP 可以提供 domain_hints 属性,作为账号列表的响应的一部分 端点更改为 指明账号与哪些网域相关联。这样,浏览器就能 可以在不向 IdP。

来自账号列表端点的 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"]
  }]
}

RP 可以使用 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 请求,并滤除相应账号 指定的 domainHintnavigator.credentials.get() 通话。然后,Chrome 会向 使用新账号列表创建用户此方法类似于登录提示 API,但 API 可以回答不同的问题。Login Hint API 旨在回答“是 而“Domain Hint”则旨在回答“哪个 公司或服务器?”

使用 domainHint: "any" 时,Chrome 会滤除没有 任何网域(即 domain_hints 未传递或为空)。例如: 这使得 RP 仅允许受管理的账号进行注册 过程。

如果没有与 domainHint 匹配的账号,FedCM 对话框会显示登录提示。 这让用户可以登录到与 RP。当用户点按提示时,系统会打开一个弹出式窗口,其中包含 config 文件。链接为 然后附加登录提示和域提示查询参数。

<ph type="x-smartling-placeholder">
</ph> 没有与 domainHint 匹配的账号时的登录提示示例。
没有与 domainHint 匹配的账号时的登录提示示例。