You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Chrome DevTools Protocol的WebAuthn.addCredential方法报错求助

Cypress调用WebAuthn.addCredential报错排查

问题场景

在Cypress测试中调用Chrome DevTools Protocol的WebAuthn.addCredential方法,代码如下:

credential = {
    credentialId:"myid",
    isResidentCredential: true,
    rpId:"localhost",
    userHandle: "bXl1c2VyaGFuZGxlDQo=",
    privateKey: "my_private_key",
    signCount: 0,
  }

Cypress.automation('remote:debugger:protocol', {
  command: 'WebAuthn.addCredential',
  params: {
    authenticatorId: authenticatorId,
    credential,
  },
})

执行后抛出无明确提示的错误:

Error: An error occurred trying to create the credential
    at <embedded>:2262:577727
    at _._handleMessage (<embedded>:2262:580030)
    at A.<anonymous> (<embedded>:2262:579669)
    at A.emit (node:events:514:28)
    at f.U (<embedded>:2262:564853)
    at f.emit (node:events:514:28)
    at f.dataMessage (<embedded>:2262:545228)
    at f.getData (<embedded>:2262:544410)
    at f.startLoop (<embedded>:2262:541117)
    at f._write (<embedded>:2262:540472)
    at writeOrBuffer (node:internal/streams/writable:392:12)
    at _write (node:internal/streams/writable:333:10)
    at f.write (node:internal/streams/writable:337:10)
    at Socket.W (<embedded>:2262:565539)
    at Socket.emit (node:events:514:28)
    at addChunk (node:internal/streams/readable:324:12)
    at readableAddChunk (node:internal/streams/readable:297:9)
    at Socket.push (node:internal/streams/readable:234:10)
    at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
From previous event:
    at Promise.longStackTracesCaptureStackTrace [as _captureStackTrace] (http://localhost:5172/__cypress/runner/cypress_runner.js:3486:19)
    at Promise._then (http://localhost:5172/__cypress/runner/cypress_runner.js:1239:17)
    at Promise.then (http://localhost:5172/__cypress/runner/cypress_runner.js:1132:17)
    at next (http://localhost:5172/__cypress/runner/cypress_runner.js:144101:64)
    at http://localhost:5172/__cypress/runner/cypress_runner.js:144122:16
    at tryCatcher (http://localhost:5172/__cypress/runner/cypress_runner.js:1807:23)
    at Promise._settlePromiseFromHandler (http://localhost:5172/__cypress/runner/cypress_runner.js:1519:31)
    at Promise._settlePromise (http://localhost:5172/__cypress/runner/cypress_runner.js:1576:18)
    at Promise._settlePromise0 (http://localhost:5172/__cypress/runner/cypress_runner.js:1621:10)
    at Promise._settlePromises (http://localhost:5172/__cypress/runner/cypress_runner.js:1701:18)
    at http://localhost:5172/__cypress/runner/cypress_runner.js:2392:25

私钥是按ECDSA密钥生成规则创建的,以下是可能的报错原因:

可能的报错原因

  • privateKey格式不匹配:CDP的WebAuthn.addCredential要求privateKey必须是Base64编码的DER格式,而非原始PEM或其他格式。如果生成的是PEM格式密钥,需要先去除-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----头尾,再将剩余内容Base64编码(注意如果原始PEM有换行需先去除)。
  • credentialId格式问题:credentialId需要是Base64编码值,直接用字符串"myid"可能不符合要求,需将原始ID转换为Base64编码后传入。
  • authenticatorId无效:确认authenticatorId是通过WebAuthn.addVirtualAuthenticator创建的有效ID,若未正确创建或ID已失效,会导致添加凭证失败。
  • userHandle格式错误:虽然你的userHandle是Base64编码,但需确保解码后的原始数据符合WebAuthn规范(通常是用户标识的字节序列,长度建议在1-64字节之间)。
  • Chrome版本兼容性:不同Chrome版本对CDP的WebAuthn接口支持有差异,部分旧版本可能存在参数解析bug,建议升级到较新版本的Chrome再测试。
  • rpId与当前域名不匹配:确保测试页面的域名与rpId一致,localhost场景需确认页面确实运行在localhost端口下,无跨域或域名不一致问题。

内容的提问来源于stack exchange,提问作者Myrto Pirli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:50:16