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

Android Credential Manager API实现Passkey时遇CreateCredentialNoCreateOptionException错误

解决Android Credential Manager的CreateCredentialNoCreateOptionException异常

可能的原因及对应解决方法

1. 设备不支持驻留密钥(Resident Key)

你的请求强制要求residentKey=required,但部分Android设备(尤其是旧机型或无安全硬件的设备)无法支持将密钥存储在本地安全区域(TEE/StrongBox)。

  • 解决:
    若业务不强制要求驻留密钥,可将residentKey改为preferred,同时移除冗余的requireResidentKey=true(该字段为WebAuthn旧版兼容参数,新版用residentKey即可),修改后的配置片段:
    "authenticatorSelection": {
      "authenticatorAttachment": "platform",
      "residentKey": "preferred",
      "userVerification": "required"
    }
    
    若必须使用驻留密钥,需先通过KeyguardManager.isDeviceSecure()及安全硬件能力API判断设备是否支持,不支持则引导用户更换设备或调整认证方式。

2. 设备未配置用户验证方式

userVerification=required要求设备必须有可用的生物识别(指纹/面部)或PIN/图案锁,若设备未配置这些,认证器无法满足要求。

  • 解决:
    • 引导用户跳转系统设置配置设备锁/生物识别,可通过KeyguardManager.createConfirmDeviceCredentialIntent()实现。
    • 若业务允许,将userVerification改为preferred或discouraged,降低验证要求。

3. 参数冗余引发冲突

请求中同时设置requireResidentKey=true和residentKey=required,部分设备的Credential Manager实现可能对重复参数处理异常。

  • 解决:移除requireResidentKey字段,仅保留residentKey=required(若确实需要驻留密钥)。

4. RP ID配置不匹配

rp.id必须与应用关联的域名严格匹配,且应用已通过assetlinks.json完成域名所有权验证。

  • 解决:
    • 确认rp.id是应用关联域名的注册域名(需为OAuth回调域名等已验证域名的后缀,不能使用无关域名)。
    • 检查服务器根目录的/.well-known/assetlinks.json是否包含当前应用的SHA-256指纹,配置是否正确。

5. 算法兼容性问题

虽然alg=-7(ES256)和alg=-257(RS256)是标准算法,但极少数设备可能不支持其中某一种。

  • 解决:尝试仅保留alg=-7(ES256),这是当前移动设备支持最广泛的算法,修改后的配置片段:
    "pubKeyCredParams": [{"type": "public-key","alg": -7}]
    

调试建议

  • 调用CredentialManager.createCreateCredentialRequest()时捕获异常并打印详细日志,查看是否有更具体的错误提示。
  • 使用Android Studio的App Inspection工具追踪Credential Manager的调用流程,确认参数传递是否准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:02:34