为何浏览器端WebAuthn API要重构认证器发往依赖方的数据?
WebAuthn注册流程结构设计原因解答
你提到的两个疑问本质上是WebAuthn协议分层设计的必然结果,具体原因如下:
为什么不能直接在第5步发送attestationObject
attestationObject只是认证器侧生成的CBOR格式二进制加密数据,仅包含公钥、认证器签名、认证器属性等认证器侧生成的信息,缺少服务端完成注册校验必需的客户端上下文数据:
AuthenticatorAttestationResponse除了包含attestationObject,还附带了浏览器生成的clientDataJSON字段,该字段记录了发起注册请求的站点源站(origin)、挑战值(challenge)、请求类型等关键信息- 服务端验证时必须同时校验
attestationObject内的签名和clientDataJSON的一致性,才能防范跨站请求伪造、重放攻击、恶意站点冒用认证器等风险,仅靠attestationObject无法完成完整的安全校验
为什么认证器不直接生成AuthenticatorAttestationResponse
主要有两方面的限制:
- 数据获取限制:
clientDataJSON属于浏览器/客户端上层的上下文数据,认证器作为独立的硬件/系统模块(如安全密钥、指纹识别模块),无法获取当前请求的网页源站、调用方传递的挑战值等上层信息,根本无法生成完整的AuthenticatorAttestationResponse结构 - 分层解耦限制:认证器遵循的是CTAP(客户端到认证器协议)标准,设计上是跨场景通用的,除了支持Web场景的WebAuthn协议,还要支持原生App、桌面应用等其他场景的认证需求。如果认证器直接生成Web场景专属的响应结构,会导致和上层协议强绑定,无法适配其他使用场景,也不符合低功耗认证器的轻量设计原则
内容的提问来源于stack exchange,提问作者tarun14110
相关产品推荐
相关产品推荐

