跳转到主要内容

category

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

联合凭据管理API(或FedCM API)为身份提供者(IdP)提供了一种标准机制,使身份联合服务以保密的方式在网络上可用,而不需要第三方cookie和重定向。这包括一个JavaScript API,它允许在登录或注册网站等活动中使用联合身份验证。

FedCM概念


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

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

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

这通常会影响联合登录,以及更具体的身份联合使用情况:

  • OIDC front-channel logout:此流程要求IDP嵌入几个依赖RP cookie的RP<iframe>。
  • 社交小部件:为了提供社交小部件,必须从RP顶级来源提供IdP第三方cookie。
  • 个性化按钮:RP源中<button>上的个性化登录信息显示实现为需要第三方cookie的IdP<iframe>。
  • 无顶层导航或弹出窗口的会话刷新(Session Refresh without top-level navigation or popups.)

 

  • OIDC front-channel logout: This flow requires the IDP to embed several RP <iframe>s, which rely on RP cookies.
  • Social Widgets: In order to provide social widgets, the IdP third-party cookie must be provided from the RP top-level origin.
  • Personalized buttons: The display of personalized sign in information on a <button> in the RP origin is implemented as an IdP <iframe> that requires third party cookies.
  • Session Refresh without top-level navigation or popups.

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

使用FedCM API有两个部分,以下链接指南介绍了这两个部分:

  • IdP integration with FedCM ——身份提供者需要提供什么,以便RP可以与之集成。
  • RP federated sign-in --RP需要使用FedCM功能来使用用户的IdP帐户对其进行登录。使用navigator.credentials.get()方法启动FedCM登录请求。


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

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


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

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

HTML
 

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

 

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

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

接口


身份凭证


表示由成功的联合身份验证产生的用户身份凭据。一个成功的navigator.certificate.get()调用,包括一个标识选项,可以用一个IdentityCredential实例来实现。

IdentityProvider


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

导航器登录


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

对其他接口的扩展


CredentialsContainer.get(), the identity option.


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

Navigator.login


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

HTTP标头

Set-Login


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

示例

See also