Android端FIDO2实现遇CredentialManager请求验证失败求助
Android FIDO2注册报错:
The incoming request cannot be validated 排查方案 核心排查步骤
1. 核对依赖方ID与域名匹配度
- 确保FIDO2注册请求里的**依赖方ID(relying party ID)**和ngrok分配的顶级域名完全一致,比如ngrok域名是
xxxx.ngrok.io,依赖方ID就必须是xxxx.ngrok.io,不能加http/https前缀,也不能带任何路径。 - 访问
https://xxxx.ngrok.io/.well-known/assetlinks.json,确认返回的JSON中:target.namespace值为android_apptarget.package_name和测试应用的包名完全一致target.sha256_cert_fingerprints是当前签名证书的指纹(别搞混debug和release证书)
2. 检查注册请求参数合法性
challenge必须是无填充的base64 URL编码随机字节,不能用普通base64或明文。user.name、user.displayName等字段不能为空或包含非法特殊字符。pubKeyCredParams要包含Android支持的算法,比如-7(ES256)、-257(RS256),避免使用小众算法。
3. 重新验证asset_statements配置
官方说仅用passkey无需配置,但如果是跨平台场景(同时支持Web和Android),可能还是需要添加。按以下步骤重新配置:
在AndroidManifest.xml中添加:
<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
在res/values/strings.xml中添加:
<string name="asset_statements" translatable="false"> [{ \"include\": \"https://xxxx.ngrok.io/.well-known/assetlinks.json\" }] </string>
注意转义双引号,配置完成后重新打包安装应用(不要热更新)。
4. 确认证书签名一致性
- 如果用debug证书测试,用命令
keytool -list -v -keystore ~/.android/debug.keystore(默认密码android)获取指纹,确保和assetlinks里的sha256_cert_fingerprints完全一致。 - 避免使用临时签名或自定义debug keystore,保证测试用签名与配置匹配。
5. 处理ngrok临时域名变动
ngrok重启后域名会变更,每次重启后需:
- 更新FIDO2请求中的依赖方ID
- 同步更新assetlinks.json的相关配置
- 若修改了asset_statements,重新安装应用
内容的提问来源于stack exchange,提问作者lgdroid57
相关产品推荐
相关产品推荐

