联合凭据管理 (FedCM) API

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

联合凭据管理 API(或FedCM API)提供了一种标准机制,允许身份提供商 (IdP) 以保护隐私的方式在 Web 上提供身份联合服务,而无需使用第三方 Cookie和重定向。这包括一个 JavaScript API,该 API 支持使用联合身份验证来执行诸如在网站上登录或注册等操作。

FedCM 概念

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

依赖方 (RP) 可以与 IdP 集成,允许用户使用他们在 IdP 中注册的帐户登录。与每个站点使用单独的用户名和密码管理自己的登录需求相比,通过一小部分专用 IdP 进行的身份联合在安全性、消费者信心和用户体验方面提高了 Web 身份验证。

问题在于,传统的身份联合依赖于<iframe>、重定向和第三方 Cookie,这些 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. IdP 与 FedCM 集成——身份提供商需要提供什么才能使 RP 与其集成。
  2. RP 联合登录——RP 需要使用 FedCM 功能才能使用其 IdP 帐户登录用户。联合登录请求是使用navigator.credentials.get()方法发起的。

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

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

identity-credentials-get权限策略可用于控制使用 FedCM 的权限,更具体地说,是控制get()方法的使用权限。

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

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

<iframe>中 FedCM 的可用性支持以下几个用例

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

接口

IdentityCredential

表示来自成功联合身份验证的用户身份凭据。成功navigator.credentials.get()调用(包括identity选项)将使用IdentityCredential实例来完成。

IdentityProvider

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

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

其他接口的扩展

CredentialsContainer.get()identity选项。

identity是一个包含依赖方 (RP) 网站可用于登录用户的联合 IdP 详细信息的对象。它会导致get()调用启动请求,以要求用户使用 IdP 登录到 RP。

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

HTTP 头

设置登录

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

示例

规范

规范
联合凭据管理 API
# browser-api-identity-credential-interface

浏览器兼容性

BCD 表仅在启用了 JavaScript 的浏览器中加载。

另请参阅