联合凭据管理 (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 分为两部分,在下面的链接指南中进行了介绍
- FedCM 的 IdP 集成 — 身份提供方需要提供什么才能让 RP 与之集成。
- 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 的权限
<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 标头
示例
有关示例代码,请参阅
规范
| 规范 |
|---|
| Federated Credential Management API # browser-api-identity-credential-interface |
浏览器兼容性
加载中…