Android集成Passkey异常:未唤起本地密钥却显示跨设备二维码
针对你遇到的「本地Passkey未唤起、显示跨设备二维码并抛出GetCredentialCancellationException」问题,可从以下几个关键点排查:
修正
allowCredentials参数
当前allowCredentials为空数组,系统会判定无可用本地凭证,直接触发跨设备登录流程。需从WSO2身份服务器获取用户已注册的Passkey凭证ID列表,按WebAuthn标准填充该字段,示例格式:"allowCredentials": [ { "type": "public-key", "id": "base64url编码的凭证ID" } ]若WSO2未返回凭证ID,需先排查Passkey注册流程是否成功,确认凭证已绑定用户账号并存储到本地设备。
校验
rpId一致性rpId必须与Passkey注册时使用的RP ID完全匹配(包括域名后缀,如注册用abc.com则请求不能用sub.abc.com)。检查WSO2配置的RP ID、请求中的rpId、本地存储Passkey的RP ID三者是否完全一致。同时确保该域名已与应用正确关联(即使未设置数字资产链接,也需保证WSO2配置映射正确)。修正参数大小写错误
WebAuthn标准中超时参数为小写timeout,你当前使用的大写Timeout会被系统忽略,可能导致超时逻辑异常,修正为:"timeout": 1800000确认本地Passkey状态
进入设备系统设置(Android路径:「设置-密码与安全-密码密钥」),检查是否存在RP ID为abc.com的Passkey。若不存在,优先排查注册流程;若存在,尝试清除应用缓存后重新发起请求,排除缓存干扰。排查WSO2请求生成逻辑
验证WSO2返回的challenge为标准Base64URL编码格式,无格式错误;同时确认WSO2是否正确读取用户已注册的凭证信息,确保allowCredentials的数据源准确。
内容的提问来源于stack exchange,提问作者Achintha Isuru

