在 Android 上使用 Jetpack Compose 的 Passkeys PoC 中 rpId 验证失败

问题描述 投票:0回答:1

我正在使用 Jetpack Compose 为 Android 应用程序进行密钥概念验证 (PoC)。我已设置了应用程序到 Web 身份验证所需的数字资产链接 (assetlinks.json) 和域验证。尽管遵循了设置,但在尝试使用密钥时,我遇到了与 rpid 验证失败相关的错误。

我正在通过浏览器创建一个密钥,然后尝试在本机应用程序中使用它。

这是我所做的:

使用 adb shell pm get-app-links my.package.example 验证了我的域名,返回:

my.package.example:
  ID: 09699a58-4970-4dd8-8f30-323c5c792297
  Signatures: [CF:BF:CC:4C:AF:28:CF:82:35:F9:9D:D0:F5:C6:14:1A:AC:CF:E9:50:AA:12:25:80:E5:1D:BD:60:1E:04:21:53]
  Domain verification state:
    my.domain.com: 1024

这是我的assetlinks.json

[
    {
        "relation": [
            "delegate_permission/common.get_login_creds",
            "delegate_permission/common.handle_all_urls"
        ],
        "target": {
            "namespace": "android_app",
            "package_name": "my.package.example",
            "sha256_cert_fingerprints": [
                "CF:BF:CC:4C:AF:28:CF:82:35:F9:9D:D0:F5:C6:14:1A:AC:CF:E9:50:AA:12:25:80:E5:1D:BD:60:1E:04:21:53"
            ]
        }
    },
    {
        "relation": [
            "delegate_permission/common.handle_all_urls",
            "delegate_permission/common.get_login_creds"
        ],
        "target": {
            "namespace": "web",
            "site": "https://my.domain.com"
        }
    }
]

我的 AndroidManifest.xml 包含一个带有 android:autoVerify="true":

的意图过滤器
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="https" />
    <data android:host="my.domain.com" />
</intent-filter>

域名也正确包含在字符串中:

<string name="asset_statements" translatable="false">
  [{\"include\": \"https://my.domain.com/.well-known/assetlinks.json\"}]
</string>

我在 JSON 请求中传递 rpId:

val requestJson = JSONObject().apply {
    put("challenge", authorizationResponse.metadata.challenge)
    put("rpId", "my.domain.com")
    put("allowCredentials", JSONArray())
    put("timeout", 18000)
    put("userVerification", "required")
}

尽管如此,我仍然收到以下错误:

rpId 验证失败

并且无法使用 pm get-app-links my.package.example 验证域

域名验证状态: my.domain.com:1024

android authentication credentials webauthn passkey
1个回答
0
投票

您没有包含您的实际域名,因此我无法为您检查,但您可以查询底层服务来检查您的域名状态:

curl 'https://digitalassetlinks.googleapis.com/v1/assetlinks:check?source.web.site=https://example.com&relation=delegate_permission/common.handle_all_urls&target.android_app.package_name=PACKAGE_NAME&target.android_app.certificate.sha256_fingerprint=APK_CERTIFICATE_FINGERPRINT'

当然,请务必更换

PACKAGE_NAME
APK_CERTIFICATE_FINGERPRINT
。后者应该采用十六进制带冒号的格式,如上面所示。

© www.soinside.com 2019 - 2024. All rights reserved.