在我的使用情况中,有一个注册页面会触发特定于浏览器的Webauthn流程。例如,在Mac上的Chrome浏览器中,您将看到以下一系列弹出窗口:
请注意,
在执行任何与
- 在USB安全密钥和内置传感器之间选择选项
- 使用Touch ID进行的MacOS确认
- Chrome浏览器请求访问您的安全密钥的确认对话框
import { Command } from 'selenium-webdriver/lib/command';
addVirtualAuthenticator = async () => {
await this.driver.getSession().then(async session => {
this.driver
.getExecutor()
.defineCommand('AddVirtualAuthenticator', 'POST', `/session/${session.id_}/webauthn/authenticator`);
let addVirtualAuthCommand = new Command('AddVirtualAuthenticator');
addVirtualAuthCommand.setParameter('protocol', 'ctap2');
addVirtualAuthCommand.setParameter('transport', 'internal');
addVirtualAuthCommand.setParameter('hasResidentKey', true);
addVirtualAuthCommand.setParameter('isUserConsenting', true);
await this.driver.getExecutor().execute(addVirtualAuthCommand);
});
};
请注意,
this.driver
的类型是WebDriver
。在执行任何与
navigator
交互的代码之前调用addVirtualAuthenticator
(在我们的情况下,用户注册涉及调用navigator.credentials.create
)。如果您需要在登录期间通过navigator.credentials.get({ publicKey: options })
访问publicKey,则hasResidentKey
至关重要。
navigator.credentials.get({ publicKey: options })
,因此为了让虚拟认证器正常工作,我需要包含addVirtualAuthCommand.setParameter('hasResidentKey', true);
。这是一个如此简单的修复,但花费了很长时间才找到。但现在它可以工作了!仍在整理测试结构,一旦满意,我会更新更完整的发现。 - mkhbragg