Windows10下WebAuthn仅显示USB安全密钥选项,无指纹/PIN/密码选项
Windows 10 Chrome下WebAuthn仅显示USB安全密钥,无法调用Windows Hello指纹/PIN的原因及解决办法
核心原因:WebAuthn请求参数未适配平台验证器
Windows Hello属于平台验证器(Platform Authenticator),而USB安全密钥是跨平台验证器(Cross-Platform Authenticator)。WebAuthn的请求参数直接决定浏览器会调用哪类验证器,参数配置不当就只会显示USB密钥选项。
具体排查与解决步骤
检查WebAuthn请求的
authenticatorSelection参数
注册或认证请求中,若未指定或错误配置authenticatorAttachment,浏览器会默认优先调用跨平台验证器。正确配置需:- 将
authenticatorAttachment设为platform(强制使用Windows Hello这类平台验证器),或不设置该字段(让浏览器自动适配所有可用验证器); - 将
userVerification设为preferred或required,触发Windows Hello的指纹/PIN验证流程。
示例代码片段:
const publicKeyCredentialCreationOptions = { // 其他必填参数(rp、user、challenge等) authenticatorSelection: { authenticatorAttachment: 'platform', userVerification: 'preferred' } };- 将
验证Chrome的WebAuthn平台验证器支持
- 访问
chrome://flags/#webauthn-platform-authenticator,确认该选项处于Enabled状态(最新版Chrome默认已启用,无需手动修改); - 若修改过flags,重启Chrome后重新测试。
- 访问
确认Windows Hello的有效性
- 即便已设置PIN和指纹,仍建议重新设置Windows Hello PIN:打开「设置」→「账户」→「登录选项」→「Windows Hello PIN」→「我忘记了我的PIN」,重新设置后再测试;
- 确保Windows 10版本在1903及以上(早期版本对WebAuthn平台验证器支持不完善)。
关于webauthn.me的测试限制
你使用的测试站点可能默认配置了仅调用跨平台验证器的参数,导致无法触发Windows Hello。若要验证Windows Hello的WebAuthn功能,建议自行编写包含正确参数的测试代码,或使用支持平台验证器的测试工具。
安卓Chrome正常工作的原因
安卓系统的WebAuthn平台验证器直接对接系统锁屏验证,浏览器默认会自动调用,无需额外指定参数,因此能正常显示指纹、验证码等选项。
内容的提问来源于stack exchange,提问作者Ryan Griggs
相关产品推荐
相关产品推荐

