实现Passkey时AuthenticatorAttestationResponse.getPublicKey返回Restricted对象
关于Passkey注册中
getPublicKey()返回Restricted对象的问题 这种情况是浏览器的预期安全行为,并非你遗漏了关键步骤。
原因说明
WebAuthn规范虽然定义了AuthenticatorAttestationResponse.getPublicKey()方法用于获取公钥的ArrayBuffer,但主流浏览器(如Chrome)出于隐私和安全防护的考虑,会将该方法返回的对象标记为Restricted { },禁止客户端脚本直接读取或操作。这是为了避免公钥被恶意脚本不当获取或泄露,符合WebAuthn的安全模型设计。
正确处理方式
你当前采用的将attestationObject发送到后端解码的方案,正是WebAuthn注册流程的标准推荐做法:
attestationObject是经过CBOR编码的二进制数据,包含了公钥、认证器信息等所有必要的注册验证数据- 后端可以通过CBOR解码库(如Node.js的
cbor包、Java的org.webauthn库等)解析出公钥及其他字段,完成后续的验证和存储逻辑
关于客户端提取公钥的可能性
虽然部分早期资料提到可以在客户端处理公钥,但目前主流浏览器的安全限制已经阻断了这种操作路径。即使在HTTPS安全上下文下,也无法绕过该限制直接读取getPublicKey()的返回值。因此无需尝试强行在客户端处理,遵循后端解码的标准流程即可。
内容的提问来源于stack exchange,提问作者Ryan Faulhaber
相关产品推荐
相关产品推荐

