根本原因是firefox默认禁用hid类usb设备底层访问且不继承系统fido2服务状态;需在about:config中启用webauthn.enable、webauthn.u2f、webauthn.ctap2,清除webauthn.sqlite缓存,关闭沙盒拦截,并禁用windows hello代理层。

火狐浏览器无法识别USB设备提供的WebAuthn身份验证,常见于插入YubiKey、飞天ePass或Google Titan密钥后,网页提示“未检测到安全密钥”或navigator.credentials.create()调用直接失败,根本原因在于Firefox默认禁用HID类USB设备的底层访问通道,且不自动继承系统级FIDO2服务状态。
确认Firefox已启用WebAuthn基础支持
Firefox自91版本起原生支持WebAuthn,但需确保未被策略或插件屏蔽。在地址栏输入about:config→回车→点击“我了解此风险”。
搜索webauthn,检查以下三项布尔值是否均为true:【webauthn.enable、webauthn.u2f、webauthn.ctap2】;若任一为false,双击切换为true。
关闭所有Firefox窗口(包括后台进程),否则新设置不生效。
解除Sandboxie等沙盒环境对USB HID设备的拦截
若使用Sandboxie Plus运行Firefox,其默认配置会阻断HID协议通信——这是FIDO2密钥通过USB传输CTAP2指令的底层通道。
方法一:打开Sandboxie Plus主界面→右键对应沙盒→【沙盒设置】→【Advanced】→勾选【Allow access to USB devices】→重启沙盒内Firefox。
方法二:更彻底地放行HID类设备,在同一设置页中点击【Edit Configuration】→在[BoxRules]节下添加:OpenFilePath=*\HID\* →保存并重启沙盒。
【必须重启整个沙盒,仅重启浏览器无效】
强制刷新Firefox的USB设备枚举缓存
Firefox会缓存USB设备连接状态,拔插多次后可能卡在旧枚举结果,导致新插入的密钥不触发WebAuthn流程。
第一步:关闭所有Firefox窗口,按Ctrl+Shift+Esc打开任务管理器→结束所有firefox.exe进程。
第二步:按下Win+R→输入%APPDATA%\Mozilla\Firefox\Profiles→回车→进入当前配置文件夹→删除名为webauthn.sqlite的文件(该文件存储设备指纹与权限记录)。
第三步:重新启动Firefox,访问https://webauthn.io测试页面,插入USB密钥后点击“Register”按钮,此时应弹出系统级设备选择对话框。
绕过Windows Hello代理层直连物理密钥
Windows 10/11默认将FIDO2请求路由至Windows Hello服务,而Firefox有时无法与该服务正确协商——尤其当系统启用了PIN登录但未绑定密钥时。
方法一:以管理员身份运行cmd,执行:reg add "HKLM\SOFTWARE\Mozilla\Firefox\Preferences" /v webauthn.winhello_fallback /t REG_DWORD /d 0 /f,强制Firefox跳过Hello代理。
方法二:在about:config中新建布尔值,名称为webauthn.winhello_fallback,设为false。
方法三:临时禁用Windows Hello——设置→账户→登录选项→关闭“Windows Hello PIN”和“安全密钥”,重启Firefox后再测试USB密钥响应。











