返回
如何在 FIDO2 创建密钥时解决“传入请求无法验证”难题?
Android
2024-03-14 20:28:10
## 攻克 FIDO2 创建密钥时的“传入请求无法验证”难题
### 问题
在使用 FIDO2 管理安卓设备密钥时,你可能会遭遇以下报错:“createPasskey failed with exception: The incoming request cannot be validated”。本文将分步指导你解决这一问题。
### 原因分析
此错误源自以下原因:
- 无法验证 Assetlinks 文件: 该文件无法通过浏览器访问。
- AndroidManifest 中未包含 Assetlinks 声明: manifest 文件中缺少必要信息。
### 解决方案
#### 步骤 1:验证 Assetlinks 文件
- 打开 localhost 地址,确保能访问 Assetlinks 文件。
- 若无法访问,检查 Web 服务器配置,确保它已正确提供该文件。
#### 步骤 2:添加 Assetlinks 声明到 AndroidManifest
在 AndroidManifest 文件中,添加以下代码段:
<meta-data
android:name="asset_statements"
android:resource="@xml/asset_links" />
#### 步骤 3:检查你的代码
- 确保正确发起密钥创建操作。
- 检查你是否妥善处理服务器响应并验证传入请求。
#### 步骤 4:排除其他潜在问题
- 确认安卓设备启用了 WebAuthn 支持。
- 检查服务器是否配置为支持 FIDO2。
- 在不同浏览器或设备上测试你的应用程序。
### 代码示例
密钥创建请求:
val request = PublicKeyCredentialCreationOptions.Builder()
.setRp(...)
.setChallenge(...)
.setPubKeyCredParams(...)
.setUser(...)
.build()
验证传入请求:
val clientData = PublicKeyCredentialCreationOptions.getClientDataFromResponse(response)
if (!validateClientData(clientData)) {
// Handle invalid client data
}
### 常见错误
- AndroidManifest 中缺少 Assetlinks 声明。
- Assetlinks 文件配置错误。
- 代码未正确请求密钥创建。
- 服务器未配置为支持 FIDO2。
### 总结
通过遵循上述步骤,你可以解决 FIDO2 创建密钥时的“传入请求无法验证”问题。仔细检查你的配置和代码,逐一排除潜在问题。
### 常见问题解答
1. 什么是 Assetlinks 文件?
它是一个清单文件,验证网站和应用之间的所有权。
2. 为什么需要在 AndroidManifest 中添加 Assetlinks 声明?
这使安卓系统能够验证网站和应用程序是否属于同一实体。
3. 如何生成 Assetlinks 文件?
可以使用 Google 提供的 Assetlinks 生成器创建。
4. 在哪里可以找到 AndroidManifest 文件?
位于应用程序的根目录,通常称为 AndroidManifest.xml。
5. 如果我仍然遇到此问题,该怎么办?
请检查你的服务器配置,确保它已正确配置为支持 FIDO2。