Chrome 支持在 FedCM 中自动重新验证身份
Federated Credential Management API (FedCM) 是一个 Web API,可实现可保护隐私的身份联合。借助身份联合,RP(依赖方)依赖 IdP(身份提供方)为用户提供账号,而无需用户输入新的用户名和密码。
FedCM 可让浏览器了解 RP 和 IdP 交换信息的上下文。它会告知用户共享的信息和权限级别,并防止意外滥用。从 Chrome 108 开始,FedCM 已在 Chrome 中提供。
在 Chrome 115 中,FedCM 将支持自动重新身份验证,这有助于改善用户体验,并支持在用户初次同意后更顺畅地向 RP 重新进行身份验证。
自动重新验证
目前,用户通过 FedCM API 在 RP 上使用 IdP 创建联邦账号后,下次访问该网站时,他们需要在界面中完成相同的步骤。这意味着,用户需要明确手动重新确认,才能重新进行身份验证并继续登录流程。
虽然在用户创建联合账号以防止跟踪(这是 FedCM 的主要目标之一)之前,明确的用户体验很有意义,但在用户完成一次体验后,再强制用户针对之前已确认的内容再次明确确认,就显得多余且繁琐:在用户授予允许 RP 与 IdP 之间通信的权限后,再强制用户针对之前已确认的内容再次明确确认,对隐私或安全没有任何好处。因此,我们推出了更简化的用户体验,让 RP 可以为其回访用户选择。
FedCM 自动重新身份验证(简称“auto-reauthn”)可让用户在使用 FedCM 进行初始身份验证后再次访问时自动重新进行身份验证。这里的“初始身份验证”是指用户在同一浏览器实例中首次点按 FedCM 登录对话框中的“Continue as...” 按钮,创建账号或登录 RP 的网站。

选择自动重新授权选项
虽然我们引入自动重新授权是为了提供更好的用户体验并符合规范,但即使不更改任何代码,默认用户体验也会有所不同。自动重新授权可用时,浏览器会根据开发者通过 navigator.credentials.get()
提供的 mediation
选项中您选择的选项来更改其行为。
const cred = await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/fedcm.json",
clientId: "1234",
}],
},
mediation: 'optional', // this is the default
});
mediation
是 Credential Management API 中的属性,其行为与 PasswordCredential 和 FederatedCredential 相同,并且 PublicKeyCredential 也部分支持它。该属性接受以下四个值:
'required'
:始终需要中介才能继续,例如点击界面上的“继续”按钮。如果您希望用户每次需要进行身份验证时都明确授予权限,请选择此选项。'optional'
(默认):尽可能自动重新授权,否则需要中介。我们建议您在登录页面上选择此选项。'silent'
:如果可能,自动重新授权;如果不可能,则静默失败,无需中介。我们建议您在专用登录页面以外但希望用户保持登录状态的页面(例如配送网站上的商品页面或新闻网站上的文章页面)上选择此选项。'conditional'
:用于 WebAuthn,目前不适用于 FedCM。
在进行此调用时,会在以下情况下自动重新授权:
- FedCM 可供使用。例如,用户尚未在设置中全局停用 FedCM 或针对 RP 停用 FedCM。
- 用户仅使用一个具有 FedCM API 的账号在此浏览器上登录了该网站。
- 用户已使用该账号登录 IdP。
- 自动重新授权未在过去 10 分钟内发生。
- RP 在之前的登录之后未调用
navigator.credentials.preventSilentAccess()
。
满足上述条件后,系统会在调用 FedCM navigator.credentials.get()
后立即尝试自动重新对用户进行身份验证。
使用 preventSilentAccess()
强制执行中介
在用户退出账号后立即自动重新对其进行身份验证,会给用户带来不太好的体验。因此,FedCM 在自动重新授权后会有一个 10 分钟的安静期,以防止出现这种行为。这意味着,除非用户在 10 分钟内重新登录,否则系统每 10 分钟最多会自动重新授权一次。当用户明确退出 RP(例如,点击“退出”按钮)时,RP 应调用 navigator.credentials.preventSilentAccess() 以明确请求浏览器停用自动重新授权。
function signout() {
navigator.credentials.preventSilentAccess();
location.href = '/signout';
}
用户可以在设置中选择停用自动重新授权
用户可以在“设置”菜单中选择停用自动重新授权:
- 在桌面版 Chrome 中,依次选择
chrome://password-manager/settings
> 自动登录。 - 在 Android 版 Chrome 中,依次打开设置 > 密码管理工具 > 点按右上角的齿轮图标 >“自动登录”。
通过停用此切换开关,用户可以完全停用自动重新授权行为。如果用户在 Chrome 实例中登录了 Google 账号并启用了同步功能,系统会存储此设置并在设备间同步。
分享反馈
如果您正在测试 FedCM,可以在 crbug.com 上在组件 “Blink > Identity > FedCM” 下分享反馈或遇到的任何问题。
照片由 Noah Samuel Franz 拍摄,选自 Unsplash