Selenium(Java)测试:通过Windows Hello实现WebAuthn认证
Selenium模拟Windows Hello PIN码WebAuthn登录解决方案
可以通过Selenium的虚拟认证器模拟Windows Hello PIN码的WebAuthn登录,你的现有配置存在几个关键问题,调整后即可正常工作:
问题分析
你的配置中setIsUserVerified(true)会直接标记用户已完成验证,跳过了服务端预期的PIN验证触发流程——多数支持Windows Hello的Web服务会要求认证器触发用户验证交互,而非直接返回已验证状态。
正确配置步骤
- 确保驱动支持:使用ChromeDriver、EdgeDriver(推荐,对Windows Hello兼容性更好)或Firefox 109+版本的驱动,这些都支持虚拟认证器功能。
- 调整虚拟认证器选项:
- 保留
Transport.INTERNAL和Protocol.CTAP2(Windows Hello基于CTAP2协议,属于内部设备) - 保留
setHasUserVerification(true)(标识认证器支持PIN验证) - 移除
setIsUserVerified(true):让认证器触发服务端预期的用户验证流程 - 可选添加
setUserVerificationRequired(true):如果服务端强制要求用户验证
- 保留
修正后的代码示例:
VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions(); options.setTransport(Transport.INTERNAL) .setProtocol(Protocol.CTAP2) .setHasUserVerification(true) .setUserVerificationRequired(true); // 按需添加,适配服务端要求 return ((HasVirtualAuthenticator) driver).addVirtualAuthenticator(options);
额外注意事项
- 凭证准备:如果测试登录流程,需确保虚拟认证器中存在对应注册的凭证。可以通过
addCredential方法提前注入凭证,或先执行注册流程测试并保存凭证后复用。 - 模拟验证通过:当服务端触发PIN验证弹窗时,可通过如下代码模拟用户输入PIN并通过验证:
VirtualAuthenticator authenticator = ((HasVirtualAuthenticator) driver).getVirtualAuthenticator(); authenticator.setUserVerified(true);
内容的提问来源于stack exchange,提问作者PatrickBateman
相关产品推荐
相关产品推荐

