跳转到内容

WebAuthn / 通行密钥(Passkey)支持情况

发布于 更新于

WebAuthn(PublicKeyCredential)让 Web 应用请求创建、以及之后请求断言一个与认证器 绑定的公钥凭据——认证器可以内置于设备,也可以是外部安全密钥——而不必使用密码;由依赖方 (relying party)的服务器对结果进行验证。根据 MDN 的说明,通行密钥(passkey) 是基于 同一套 API 的可发现(discoverable)WebAuthn 凭据。

  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
Chrome (Desktop)支持67高来源—
Chrome (Android)支持70高来源—
Edge (Desktop)支持18高来源—
Firefox (Desktop)支持60高来源1
Firefox (Android)部分支持60 → 92高来源2
Safari (macOS)支持13高来源—
Safari (iOS)支持13高来源3
Samsung Internet支持10.0高来源4
WebView (Android)支持70高来源5
  1. 仅支持 USB U2F 令牌。
  2. 仅支持 USB U2F 令牌。
  3. 由 browser-compat-data 镜像自 Safari 的数据推导。
  4. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
  5. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。

源数据: /compatibility/webauthn.json · 全球使用占比: 92 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-10-03 · 置信度: 高 (由来源计算)

在服务器签发挑战值后,从页面注册一个凭据:

async function registerCredential(challenge, userId) {
return navigator.credentials.create({
publicKey: {
challenge,
rp: { name: 'Example App' },
user: { id: userId, name: '[email protected]', displayName: 'Example User' },
pubKeyCredParams: [{ type: 'public-key', alg: -7 }],
authenticatorSelection: { residentKey: 'required' },
},
});
}

在提供 WebAuthn 或通行密钥登录路径之前,先检测 PublicKeyCredential:

function supportsWebAuthn() {
return 'PublicKeyCredential' in window;
}
async function startSignIn() {
if (!supportsWebAuthn()) {
return signInWithPassword();
}
return navigator.credentials.get({ publicKey: buildRequestOptions() });
}
  • 在展示任何 WebAuthn 或通行密钥界面之前,先检测 window.PublicKeyCredential。
  • 根据 MDN,通行密钥是一种可发现的 WebAuthn 凭据——它使用与经典 WebAuthn 相同的 navigator.credentials API,而不是另一套单独的 API。
  • 此表反映的是 PublicKeyCredential 的基线支持情况;通行密钥特有的行为(例如自动填充) 请针对你的目标平台单独验证,不要仅凭这些版本号来假定。
  • 始终为不支持 PublicKeyCredential 的浏览器或设备保留一条回退登录路径(例如密码或 邮箱链接登录)。

← 返回兼容性浏览器。