WebAuthn Passkeys 登录与安全实践注册示例(浏览器端)const pubKey = { challenge: Uint8Array.from(window.crypto.getRandomValues(new Uint8Array(32))), rp: { name: 'Example Inc.' }, user: { id: Uint8Array.from([1,2,3]), name: '[email protected]', displayName: 'User' }, pubKeyCredParams: [{ type: 'public-key', alg: -7 }], // ES256 authenticatorSelection: { userVerification: 'preferred' }, }; const cred = await navigator.credentials.create({ publicKey: pubKey }); 验证示例const req = { challenge: Uint8Array.from(window.crypto.getRandomValues(new Uint8Array(32))), allowCredentials: [{ type: 'public-key', id: storedId }], userVerification: 'preferred', }; const assertion = await navigator.credentials.get({ publicKey: req }); 服务器验证要点验证 `clientDataJSON` 的 `type` 与 `challenge`验证 `authenticatorData` 的 `rpIdHash` 与 `flags`使用注册时的公钥验证 `signature`兼容注意iOS/macOS/Android 支持 Passkeys,不同平台的发现与同步存在差异总结WebAuthn 提供更强的抗钓鱼与抗重放能力,Passkeys 进一步降低用户登录摩擦。

发表评论 取消回复