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

创建凭证时Credential Manager报错:'JSON Object doesn't have linked key'

Passkey 创建失败:无法验证请求及凭证选择器不显示问题

问题背景

此前成功在Google账号「密码管理器」中创建过Passkey设备及凭证(带屏幕锁),后续修改代码测试后回滚,现在应用能弹出Passkey提示,但无法显示凭证选择器,调用CredentialManager.create(context).createCredential(context, request)时抛出验证错误。

错误日志

Fido                    com.google.android.gms.ui            E  [DigitalAssetsAssociationChecker] JSON Object doesn't have linked key
Fido                    com.google.android.gms.ui            E  [Fido2RequestController] The incoming request cannot be validated
Fido                    com.google.android.gms.ui            E  [Fido2RequestController] The incoming request cannot be validated
Fido                    com.google.android.gms.ui            E  [FidoApiImpl] pauseSecurityKeyRequestController should not be called when SecurityKeyRequestController is null.
TaskPersister           system_server                        E  File error accessing recents directory (directory doesn't exist?).
Fido                    com.google.android.gms.ui            E  [FidoApiImpl] finishSecurityKeyRequestController should not be called when SecurityKeyRequestController is null.
WebAuthn                com.myapp.test                       E  [createCredential] CreateCredentialException: Credential save error
                                                                    androidx.credentials.exceptions.CreateCredentialCustomException: The incoming request cannot be validated
                                                                    at androidx.credentials.exceptions.publickeycredential.CreatePublicKeyCredentialDomException$Companion.createFrom(CreatePublicKeyCredentialDomException.kt:56)
                                                                    at androidx.credentials.exceptions.publickeycredential.CreatePublicKeyCredentialException$Companion.createFrom(CreatePublicKeyCredentialException.kt:51)
                                                                    at androidx.credentials.CredentialProviderFrameworkImpl.convertToJetpackCreateException$credentials_release(CredentialProviderFrameworkImpl.kt:315)
                                                                    at androidx.credentials.CredentialProviderFrameworkImpl$onCreateCredential$outcome$1.onError(CredentialProviderFrameworkImpl.kt:201)
                                                                    at androidx.credentials.CredentialProviderFrameworkImpl$onCreateCredential$outcome$1.onError(CredentialProviderFrameworkImpl.kt:187)
                                                                    at android.credentials.CredentialManager$CreateCredentialTransport.lambda$onError$2(CredentialManager.java:752)
                                                                    at android.credentials.CredentialManager$CreateCredentialTransport.$r8$lambda$8NwBIrbcK6SvF9Mra_qL_8hhFMU(Unknown Source:0)
                                                                    at android.credentials.CredentialManager$CreateCredentialTransport$$ExternalSyntheticLambda0.run(Unknown Source:6)
                                                                    at androidx.credentials.CredentialManager$$ExternalSyntheticLambda0.execute(Unknown Source:0)
                                                                    at android.credentials.CredentialManager$CreateCredentialTransport.onError(CredentialManager.java:751)
                                                                    at android.credentials.ICreateCredentialCallback$Stub.onTransact(ICreateCredentialCallback.java:123)
                                                                    at android.os.Binder.execTransactInternal(Binder.java:1344)
                                                                    at android.os.Binder.execTransact(Binder.java:1275)
TaskPersister           system_server                        E  File error accessing recents directory (directory doesn't exist?).
[
    {
        "relation": [
            "delegate_permission/common.handle_all_urls",
            "delegate_permission/common.get_login_creds"
        ],
        "target": {
            "namespace": "web",
            "site": "https://myapp.test.com"
        }
    },
    {
        "relation": [
            "delegate_permission/common.handle_all_urls",
            "delegate_permission/common.get_login_creds"
        ],
        "target": {
            "namespace": "android_app",
            "package_name": "com.myapp.test",
            "sha256_cert_fingerprints": [
                "62:8D:D4:12:94..."
            ]
        }
    }
]

已知情况:可正常访问assetlinks.json,App Links功能正常,此前成功创建过Passkey,核心报错为JSON Object doesn't have linked key及The incoming request cannot be validated。

排查与解决方案

1. 修复Asset Links双向关联结构

JSON Object doesn't have linked key错误源于assetlinks.json未建立正确的双向绑定关系。当前配置为两个独立条目,需调整为同一条目内关联web与Android应用,或添加反向关联:

修改后的双向关联配置示例:

[
    {
        "relation": [
            "delegate_permission/common.handle_all_urls",
            "delegate_permission/common.get_login_creds"
        ],
        "target": {
            "namespace": "web",
            "site": "https://myapp.test.com"
        },
        "reverse_target": {
            "namespace": "android_app",
            "package_name": "com.myapp.test",
            "sha256_cert_fingerprints": [
                "62:8D:D4:12:94..."
            ]
        }
    },
    {
        "relation": [
            "delegate_permission/common.handle_all_urls",
            "delegate_permission/common.get_login_creds"
        ],
        "target": {
            "namespace": "android_app",
            "package_name": "com.myapp.test",
            "sha256_cert_fingerprints": [
                "62:8D:D4:12:94..."
            ]
        },
        "reverse_target": {
            "namespace": "web",
            "site": "https://myapp.test.com"
        }
    }
]

2. 核对完整SHA256证书指纹

当前配置中SHA256指纹存在省略,必须填写完整无截断的指纹。可通过以下命令获取:

keytool -list -v -keystore 你的密钥文件.jks

或在Android Studio的Build > Generate Signed Bundle/APK流程中查看对应密钥的SHA256指纹,确保与assetlinks.json完全一致。

3. 清除缓存并重启设备

  • 前往设备设置 > 应用 > Google Play服务 > 存储 > 清除缓存
  • 清除应用com.myapp.test的缓存与数据
  • 重启设备后重新测试Passkey创建流程

4. 验证Passkey请求参数

回滚代码后检查CreatePublicKeyCredentialRequest参数:

  • 确认rp.id设置为myapp.test.com(与assetlinks中的site域名一致,不带https前缀)
  • 确认user.id、user.name等参数符合WebAuthn规范
  • 排查是否残留回滚后的错误参数(如无效域名、格式错误的用户信息)

5. 检查Credential Manager依赖版本

确保项目中androidx.credentials:credentials及androidx.credentials:credentials-play-services-auth依赖为最新稳定版,版本不匹配可能导致验证逻辑异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:45:13