WebAuthn 的原理是什么?
WebAuthn 是什么?
WebAuthn(全称 Web Authentication API)是 W3C 和 FIDO Alliance 共同制定的一个浏览器标准 API,它是目前最主流的无密码认证(Passwordless) 和防钓鱼双因素认证的技术基础。
简单来说,它让网站可以用以下方式替代传统密码登录:
- 指纹(Touch ID / Windows Hello 指纹)
- 面部识别(Face ID / Windows Hello 面部)
- PIN 码 + 设备安全芯片
- 硬件安全密钥(YubiKey、Google Titan 等 USB/NFC/BLE 设备)
- 跨设备的同步 Passkey(苹果、谷歌、微软的通行密钥)
核心特点:
- 真正防钓鱼:凭证绑定域名(eTLD+1),假网站完全无法使用
- 私钥永不离开设备:只把公钥给服务器
- 比短信/邮箱验证码安全得多
- 用户体验更好:大多数情况下点一下指纹/脸就登录
现在(2026年),它已经被所有主流浏览器(Chrome、Safari、Edge、Firefox)和操作系统原生支持,是 Passkey(通行密钥) 的核心底层协议。
WebAuthn 怎么工作?(两大核心流程)
注册(Registration)
用户第一次绑定设备时发生
流程:
浏览器 → navigator.credentials.create() ──→ 设备安全区(TPM/安全芯片)
↓
生成公私钥对
↓
私钥永久留在设备
↓
把公钥 + credential ID 发给服务器
认证(Authentication)
以后每次登录时发生
流程:
服务器给浏览器发一个随机 challenge(挑战)
↓
浏览器让设备用私钥对 challenge 签名
↓
浏览器把签名发回服务器
↓
服务器用之前存的公钥验证签名 → 通过则登录
开发者如何在网站上使用 WebAuthn?(简单代码示例)
// 1. 检测是否支持 WebAuthn
if (!window.PublicKeyCredential) {
alert("当前浏览器不支持 WebAuthn");
}
// 2. 注册(创建 Passkey)
async function registerPasskey() {
const publicKey = {
challenge: new Uint8Array(32), // 服务器随机生成
rp: { name: "你的网站名字", id: "example.com" },
user: {
id: new Uint8Array(16), // 用户唯一 ID
name: "user@example.com",
displayName: "张三"
},
pubKeyCredParams: [{ type: "public-key", alg: -7 }], // 常用算法
authenticatorSelection: {
authenticatorAttachment: "platform", // "platform"=设备内置, "cross-platform"=硬件钥匙
userVerification: "preferred" // "required"强制指纹/面部
}
};
try {
const credential = await navigator.credentials.create({ publicKey });
// 把 credential 发送给你的后端保存公钥
console.log("注册成功", credential);
} catch (err) {
console.error("注册失败", err);
}
}
// 3. 登录验证
async function loginWithPasskey() {
const publicKey = {
challenge: new Uint8Array(32), // 服务器新的随机 challenge
allowCredentials: [ // 可选:指定允许哪些凭证
{ type: "public-key", id: credentialId }
],
userVerification: "preferred"
};
try {
const assertion = await navigator.credentials.get({ publicKey });
// 把 assertion 发送给后端验证签名
console.log("登录成功", assertion);
} catch (err) {
console.error("登录失败", err);
}
}
实际使用建议(2026年现状)
| 场景 | 推荐方式 | 支持程度(2026) | 备注 |
| 新项目首选 | Passkey(同步型) | ★★★★★ | 苹果/谷歌/微软三家都支持同步 |
| 企业内部系统 | 硬件安全钥匙 + WebAuthn | ★★★★ | 最严格安全要求 |
| 已有密码系统升级 | 密码 + WebAuthn 作为 2FA | ★★★★★ | 最容易落地的过渡方案 |
| 只支持手机 App | 目前仍建议原生 FIDO2 API | — | WebAuthn 是浏览器标准 |
一句话总结:
WebAuthn = 现代网站最推荐的密码替代方案 + 最安全的双因素方式,
它让“输入密码”这件事正在快速变成过去式。
想自己动手试试?可以直接打开 https://webauthn.io 或 https://webauthn.me 这两个官方测试网站,体验完整的注册和登录流程,非常直观。