gpt4 book ai didi

javascript - Selenium 测试 : Authenticate with Webauthn

转载 作者:行者123 更新时间:2023-12-04 03:58:29 25 4
gpt4 key购买 nike

在我的用例中,有一个注册页面会触发浏览器特定的 webauthn 流程。例如,在 Mac 上的 Chrome 中,您会看到这一系列的弹出窗口:

  1. 在 USB 安全 key 和内置传感器之间选择一个选项
  2. 使用 Touch ID 进行 MacOS 确认
  3. Chrome 请求访问您的安全 key 的确认对话框

此外https://w3c.github.io/webauthn/#add-virtual-authenticator我没有找到太多关于在 selenium 测试中使用 webauthn 进行身份验证的文档。 有哪些资源可以帮助开发人员了解如何在 JavaScript 中使用 Selenium 测试 webauthn?我还查看了 https://github.com/SeleniumHQ/selenium/issues/7829但是示例测试用例对我来说没有意义。示例将非常赞赏。

用js的解决方案更新:

  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.driverWebDriver 类型。

在点击任何与 navigator 交互的代码之前调用 addVirtualAuthenticator(在我们的案例中,用户注册涉及调用 navigator.credentials.create) .如果您需要访问 publicKey,即在登录期间通过 navigator.credentials.get({ publicKey: options }),则 hasResidentKey关键 .

最佳答案

如果您在 java 中实现它并使用 selenium 4,一个很好的示例资源是 the tests on selenium itself .你基本上需要

  • 创建一个虚拟认证器

    在您的情况下,您应该将传输设置为 internal 并将 hasUserVerification 设置为 true 以模拟 touchID。

VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions();
options.setTransport(Transport.INTERNAL)
.hasUserVerification(true)
.isUserVerified(true);
VirtualAuthenticator authenticator =
((HasVirtualAuthenticator) driver).addVirtualAuthenticator(options);
  • 执行触发注册的操作。

    如果一切正常,浏览器应该不会显示对话框。相反,它应该立即返回一个凭证。

对于任何其他语言或 selenium 版本,您需要直接调用 WebDriver 协议(protocol)。正如您所指出的,W3C spec has documentation on the protocol endpoints .

对于java来说,可能是这样的

browser.driver.getExecutor().defineCommand(
"AddVirtualAuthenticator", "POST", "/session/:sessionId/webauthn/authenticator");

// ...

Command addVirtualAuthCommand = new Command("AddVirtualAuthenticator");
addVirtualAuthCommand.setParameter("protocol", "ctap2");
addVirtualAuthCommand.setParameter("transport", "usb");
browser.driver.getExecutor().execute(addVirtualAuthCommand);

对于 javascript,你应该可以使用 defineCommandwebDriver.execute以类似的方式。

关于javascript - Selenium 测试 : Authenticate with Webauthn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63477115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com