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

Android设备无法获取internal凭证:指定transports参数报错求助

WebAuthn获取Platform凭证时transports配置异常问题

我成功创建了platform类型的WebAuthn凭证,在尝试获取凭证生成断言时,使用了如下代码配置:

const publicKeyCredentialRequestOptions = {
        challenge: Uint8Array.from(challengeFromServer, (c) => c.charCodeAt(0)),
        allowCredentials: [
            {
              transports: ["internal"],
              type: "public-key",
              id: Uint8Array.from(credentialId, (c) => c.charCodeAt(0))
            }
        ],
        timeout: 60000,
        userVerification: "required",
        rpId: rpId
}

指纹验证弹窗正常弹出,但完成验证后收到「操作超时或未被允许」的异常。移除allowCredentials里的transports: ["internal"]选项后,设备又提示「选择蓝牙、NFC或USB安全密钥」,明显设备没识别到内部的platform凭证。

测试环境:

  • 设备:SM-N971N(Galaxy Note10)
  • 系统:Android 12
  • 浏览器:Chrome 107.0.5304.91

问题原因

Android 12搭配Chrome 107的组合,对WebAuthn的internal传输标识支持有bug。虽然platform凭证属于设备内部凭证,但这个版本的浏览器没法正确识别internal传输类型,导致验证流程走到最后直接报错。去掉transports配置后,浏览器会枚举所有支持的传输方式,但优先引导外部安全密钥,忽略了本地的生物识别凭证。

解决办法

  1. 移除手动指定的transports字段:保留allowCredentials配置,但删掉transports: ["internal"],让浏览器自动匹配对应凭证的传输方式——前提是创建凭证时已经设置了authenticatorAttachment: "platform"来指定是平台凭证。
  2. 升级浏览器版本:把Chrome更新到最新版,后续版本大概率修复了internal传输标识的识别问题。
  3. 复用创建凭证时返回的transports值:创建platform凭证成功后,保存返回结果里的transports数组,获取凭证时直接用这个值,不要手动写["internal"]——不同设备返回的传输标识可能有差异,比如有些设备会返回包含internal的多值数组,手动指定反而会限制浏览器的匹配逻辑。

内容的提问来源于stack exchange,提问作者Jinwoo An

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:50:36