WebAuthn / 通行密钥(Passkey)支持情况
发布于 更新于
WebAuthn(PublicKeyCredential)让 Web 应用请求创建、以及之后请求断言一个与认证器
绑定的公钥凭据——认证器可以内置于设备,也可以是外部安全密钥——而不必使用密码;由依赖方
(relying party)的服务器对结果进行验证。根据 MDN 的说明,通行密钥(passkey) 是基于
同一套 API 的可发现(discoverable)WebAuthn 凭据。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| 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 |
- 仅支持 USB U2F 令牌。
- 仅支持 USB U2F 令牌。
- 由 browser-compat-data 镜像自 Safari 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
在服务器签发挑战值后,从页面注册一个凭据:
async function registerCredential(challenge, userId) { return navigator.credentials.create({ publicKey: { challenge, rp: { name: 'Example App' }, pubKeyCredParams: [{ type: 'public-key', alg: -7 }], authenticatorSelection: { residentKey: 'required' }, }, });}如何在运行时检测
Section titled “如何在运行时检测”在提供 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.credentialsAPI,而不是另一套单独的 API。 - 此表反映的是
PublicKeyCredential的基线支持情况;通行密钥特有的行为(例如自动填充) 请针对你的目标平台单独验证,不要仅凭这些版本号来假定。 - 始终为不支持
PublicKeyCredential的浏览器或设备保留一条回退登录路径(例如密码或 邮箱链接登录)。
- WebAuthn 与通行密钥 — 完整的 注册/认证流程与服务器端职责
- 持久化存储 — 另一个浏览器能力兼容性页面
← 返回兼容性浏览器。