联合凭据管理 (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 包括两个部分,如下面的链接指南中所述
- IdP 与 FedCM 集成——身份提供商需要提供什么才能使 RP 与其集成。
- RP 联合登录——RP 需要使用 FedCM 功能才能使用其 IdP 帐户登录用户。联合登录请求是使用
navigator.credentials.get()
方法发起的。
权限策略集成和<iframe>
支持
identity-credentials-get
权限策略可用于控制使用 FedCM 的权限,更具体地说,是控制get()
方法的使用权限。
开发人员可以通过allow
属性显式授予<iframe>
使用 FedCM 的权限
<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 头
示例
规范
规范 |
---|
联合凭据管理 API # browser-api-identity-credential-interface |
浏览器兼容性
BCD 表仅在启用了 JavaScript 的浏览器中加载。