
WebAuthn 是一种现代化的身份验证标准,它允许用户使用生物识别技术(如指纹、面部识别)或安全密钥进行身份验证。在使用 WebAuthn 时,开发者可以通过设置超时参数来限制身份验证请求的持续时间。然而,在某些情况下,尤其是在移动设备上,开发者可能会发现设置的超时参数并没有生效。
WebAuthn 的 navigator.credentials.create() 方法接受一个包含 publicKey 属性的对象作为参数。publicKey 对象中可以包含一个 timeout 属性,用于指定身份验证请求的超时时间,单位为毫秒。
例如:
const publicKey = {
"challenge": "testchanllengevalue",
"rp": { "name": "test.com" },
"user": {
"id": "12345-543212-12345-12345",
"name": "NAME",
"displayName": "NAME"
},
"attestation": "direct",
"timeout": 20000, // 20 秒超时
"authenticatorSelection": {
"authenticatorAttachment": "platform",
"requireResidentKey": false,
"userVerification": "required"
},
"pubKeyCredParams": [
{ "type": "public-key", "alg": -7 },
{ "type": "public-key", "alg": -257 }
]
}
navigator.credentials.create({ 'publicKey': publicKey })
.then(credential => {
// 身份验证成功
})
.catch(error => {
// 身份验证失败
console.error("WebAuthn 认证失败:", error);
});上述代码片段中,timeout 被设置为 20000 毫秒,即 20 秒。理论上,如果在 20 秒内用户没有完成身份验证,请求应该超时并返回错误。
然而,在移动设备上,尤其是 Android 设备上,情况可能会有所不同。在 Android 14 之前的版本中,WebAuthn 操作通常由 Play Services 处理。Play Services 在早期版本中不支持 WebAuthn 请求的超时功能。这意味着,即使设置了 timeout 参数,它也可能不会生效。
具体原因:
虽然 WebAuthn 提供了 timeout 参数来控制身份验证请求的持续时间,但在移动设备上,由于 Android 版本的限制和 Play Services 的支持情况,超时设置可能不会生效。为了解决这个问题,开发者需要在服务端实现额外的超时机制,并合理设置超时时间,以确保安全性和用户体验。同时,进行充分的兼容性测试也是至关重要的。
以上就是WebAuthn 在移动设备上请求超时失效问题解析与解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号