
webauthn api 允许网站通过 navigator.credentials.create() 或 navigator.credentials.get() 方法与用户设备上的认证器(如指纹传感器、面部识别或安全密钥)进行交互,以实现更安全的身份验证。在创建或获取凭证时,开发者可以通过 publickey 对象中的 timeout 属性来指定一个时间限制,表示 relying party (rp) 愿意等待用户完成认证操作的最长时间(以毫秒为单位)。
例如,以下 publicKey 配置对象展示了如何设置 timeout:
const publicKey = {
"challenge": "testchanllengevalue", // 挑战值,由RP生成
"rp": { "name": "test.com", "id": "test.com" }, // RP信息
"user": {
"id": "12345-543212-12345-54321", // 用户ID
"name": "NAME", // 用户名
"displayName": "NAME" // 用户显示名称
},
"attestation": "direct", // 认证方式
"timeout": 20000, // 超时时间,单位毫秒 (20秒)
"authenticatorSelection": {
"authenticatorAttachment": "platform", // 认证器类型:平台认证器(如内置指纹)
"requireResidentKey": false, // 是否需要常驻密钥
"userVerification": "required" // 用户验证方式:必需
},
"pubKeyCredParams": [ // 支持的公钥凭证参数
{ "type": "public-key", "alg": -7 }, // ECDSA with P-256 and SHA-256
{ "type": "public-key", "alg": -257 } // RSASSA-PKCS1-v1_5 with SHA-256
]
};
// 调用 WebAuthn API
navigator.credentials.create({ 'publicKey': publicKey })
.then(credential => {
console.log("凭证创建成功:", credential);
// 将凭证发送到服务器进行验证
})
.catch(error => {
console.error("WebAuthn 操作失败:", error);
// 处理错误,例如用户取消、超时等
});在桌面浏览器环境中,当用户在 timeout 指定的时间内未完成认证操作(例如未输入PIN码、未触摸指纹传感器),navigator.credentials.create() 方法通常会抛出错误,指示操作超时。
尽管 timeout 属性在桌面端表现良好,但在特定的移动设备环境下,其行为可能不尽相同。具体而言,对于运行 Android 14 以下版本的移动设备,WebAuthn 操作的 timeout 属性可能无法按预期工作。
其主要原因在于,在这些旧版 Android 系统中,WebAuthn 的底层操作通常由 Google Play 服务(Google Play Services)负责处理。然而,Google Play 服务在实现 WebAuthn 请求时,并不支持对请求设置外部的超时机制。这意味着,即使开发者在 publicKey 对象中明确指定了 timeout 值(例如 20000 毫秒),系统也不会在达到该时间限制时自动取消指纹识别或面部识别请求。用户可能需要手动取消认证提示,或者认证操作会一直等待用户输入,直到操作系统层面发生其他中断。
这种行为差异对开发者来说是一个重要的考量点,因为它可能导致在旧版 Android 设备上用户体验不佳,用户可能会遇到长时间等待而无响应的情况,而无法通过代码层面进行有效控制。
鉴于上述平台差异,以及为了确保良好的用户体验和安全性,WebAuthn 规范对 timeout 值的设置提出了明确的建议:
避免过短的超时时间: 示例中使用的 20000 毫秒(20秒)在实际应用中通常被认为过短。用户可能需要时间来找到认证器、输入PIN码或进行生物识别,尤其是在网络条件不佳或设备响应较慢的情况下。过短的超时时间容易导致用户操作中断,产生挫败感。
遵循规范建议: WebAuthn 规范目前建议 timeout 值至少为五分钟(即 300,000 毫秒)。这个时间长度旨在为用户提供充足的认证时间,同时也能满足 Relying Party 在其信任范围内建立挑战有效性的需求。
合理评估超时时间: timeout 的具体值应反映 Relying Party 对认证器因素的信任程度(在二次认证中)以及在所有模式下建立挑战有效性的能力。一个合理的超时时间应该在保证用户有足够时间完成操作和防止长时间挂起之间取得平衡。
通过理解这些平台特性和遵循最佳实践,开发者可以构建出更健壮、更用户友好的 WebAuthn 认证流程。
以上就是WebAuthn 移动端超时机制解析与配置建议的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号