WebAuthn 无密码登录实战(FIDO2、Authenticator、Origin 与 RP ID)概述WebAuthn 提供基于公钥的强身份认证,结合 FIDO2 的平台/跨平台认证器与生物特征,显著提升安全与体验。关键实践与参数RP ID:等于有效注册域(eTLD+1),如 `example.com`;与 `Origin` 必须匹配同站策略。挑战(challenge):服务端生成随机不可预测字节序列,单次有效,绑定会话。用户验证(userVerification):建议 `required`,提升抗钓鱼与抗重放能力。Attestation:按需验证设备来源与证书链(隐私考虑下可 `none`)。签名算法:`alg` 使用 `-7 (ES256)` 等安全曲线。实现要点(流程)注册:服务端生成 `challenge` 与 RP 信息,前端调用 `navigator.credentials.create`;回传公钥凭据与 Attestation。登录:服务端生成 `challenge`,前端调用 `navigator.credentials.get`;服务端根据已注册的 `credentialId` 验证签名。验证方法检查 `clientDataJSON` 中的 `type` 与 `origin`;`authenticatorData` 的 `rpIdHash` 与标志位(UV/UP)。验证签名与计数器递增;防止回放。在 HTTPS 下测试跨浏览器与平台认证器(平台/安全密钥)。注意事项全站 HTTPS;禁止混合内容。RP ID 与子域关系需明确;如需多子域支持使用统一 RP ID 或独立注册。结合风险控制与后备验证渠道(如恢复码),提升可用性。

发表评论 取消回复