联合凭据管理 (FedCM) API

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

联邦身份凭证管理 API (或 FedCM API) 提供了一种标准的机制,使 身份提供方 (IdP) 能够以保护隐私的方式在 Web 上提供身份联合服务,而无需 第三方 Cookie 和重定向。这包括一个 JavaScript API,它允许将联合身份验证用于在网站上登录或注册等活动。

FedCM 概念

身份联合是指将用户身份验证委托给需要用户注册或登录的网站(如电子商务或社交网站,也称为 信赖方 或 RP),委托给一个受信任的第三方身份提供方 (IdP),例如 Google、Facebook/Meta、GitHub 等。

RP 可以与 IdP 集成,允许用户使用他们在 IdP 注册的账户进行登录。通过一小组专用的 IdP 进行身份联合,在安全性、消费者信任度和用户体验方面改进了 Web 身份验证,相比于每个网站都使用单独的用户名和密码管理自己的登录需求。

问题在于,传统的身份联合依赖于 <iframe>、重定向和第三方 Cookie,而这些也用于第三方跟踪。浏览器正在限制这些功能的使用,以保护用户隐私,但其副作用是使得合法的、非跟踪性的用途更难实现,包括身份联合。

这会影响到一般的联合登录,以及更具体的身份联合用例

  • OIDC 前端通道注销:此流程要求 IdP 嵌入多个 RP <iframe>,这些 <iframe> 依赖于 RP Cookie。
  • 社交小部件:为了提供社交小部件,必须从 RP 顶级域名提供 IdP 的第三方 Cookie。
  • 个性化按钮:在 RP 域名下的 <button> 上显示个性化的登录信息,是通过 IdP <iframe> 实现的,该 <iframe> 需要第三方 Cookie。
  • 在没有顶级导航或弹出窗口的情况下刷新会话。

FedCM 旨在解决这个问题,为 Web 上的联合身份流程提供一个专用机制,并使支持的浏览器能够在 RP 上提供特殊的 UI 元素,允许用户选择一个 IdP 账户用于登录。

使用 FedCM API 分为两部分,在下面的链接指南中进行了介绍

  1. FedCM 的 IdP 集成 — 身份提供方需要提供什么才能让 RP 与之集成。
  2. RP 联合登录 — RP 需要使用的 FedCM 功能,以便使用用户的 IdP 账户登录用户。FedCM 登录请求使用 navigator.credentials.get() 方法启动。

注意: Google Sign In 是一个已支持 FedCM 的 IdP 示例。 迁移到 FedCM 提供了希望将使用 Google Sign In 的现有应用程序迁移到联合登录的 RP 的说明。

权限策略集成和 <iframe> 支持

identity-credentials-get Permissions-Policy 可用于控制使用 FedCM 的权限。更具体地说,它允许使用以下方法

开发人员可以通过 allow 属性明确授予 <iframe> 使用 FedCM 的权限

html
<iframe src="3rd-party.example" allow="identity-credentials-get"></iframe>

FedCM 在 <iframe> 中的可用性支持了几个用例

  • 大型网站不希望第三方登录脚本控制顶层框架;相反,它们会希望在 <iframe> 中添加该脚本并调用 FedCM。
  • 某些 <iframes> 本身可能需要联合身份验证。

接口

IdentityCredential

表示成功的联合身份验证产生的用户身份凭证。包含 identity 选项的成功的 navigator.credentials.get() 调用会完成一个 IdentityCredential 实例。

IdentityCredentialError

表示身份验证错误,指示用户代理在用户请求使用联合凭证进行身份验证后,未收到身份断言。

IdentityProvider

表示一个 IdP,并提供对相关信息和功能的访问。

定义 IdP 的登录功能,包括用于 更新 IdP 登录状态Navigator.login.setStatus() 方法。

其他接口的扩展

CredentialsContainer.get()identity 选项。

identity 是一个包含联合 IdP 详细信息的对象,信赖方 (RP) 网站可以使用这些信息来登录用户。它会促使 get() 调用发起一个请求,让用户使用 IdP 登录 RP。

提供对浏览器 NavigatorLogin 对象的访问。

HTTP 标头

Set-Login

提供了一个 HTTP 机制,用于通过 HTTP 更新登录状态

示例

有关示例代码,请参阅

规范

规范
Federated Credential Management API
# browser-api-identity-credential-interface

浏览器兼容性

另见