You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cypress测试网站时无法绕过企业双因素认证(2FA)问题咨询

Cypress 绕过企业双因素认证的可行方案

方案1:复用已认证的浏览器用户配置(新手最友好)

  • 首先手动启动Chromium内核浏览器(Chrome/Edge都可),指定固定用户配置目录和远程调试端口,命令示例:
    Windows:chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\cypress-test-profile"
    Mac:/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir="~/cypress-test-profile"
  • 在弹出的浏览器中手动走完邮箱登录、RSA令牌验证全流程,确认刷新页面不需要二次验证后关闭浏览器
  • 在cypress.config.js中添加配置,让Cypress启动浏览器时直接调用该已完成认证的配置目录:
const { defineConfig } = require('cypress')
module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on('before:browser:launch', (browser, launchOptions) => {
        if (browser.family === 'chromium') {
          // 替换为你自己设置的用户配置目录路径
          launchOptions.args.push('--user-data-dir=C:\\cypress-test-profile')
          return launchOptions
        }
      })
    },
  },
})

后续Cypress启动浏览器时会直接携带已有的认证信息,不需要重复走2FA流程。

方案2:提前注入认证Cookie跳过登录流程

  • 手动完成一次完整的登录+2FA验证流程,打开F12开发者工具-应用面板,复制所有和登录态、SSO、2FA相关的Cookie值、有效域、属性信息
  • 在Cypress测试用例的前置钩子中直接注入上述Cookie,无需访问登录页即可直接进入业务页面:
beforeEach(() => {
  // 按实际复制的Cookie信息替换对应参数
  cy.setCookie('SSO_SESSION', '实际的会话值', {
    domain: '.your-company-domain.com',
    secure: true,
    httpOnly: true
  })
  cy.setCookie('2FA_VERIFIED', '1', {
    domain: '.your-company-domain.com'
  })
  // 注入完成后直接访问业务测试页面
  cy.visit('/your-test-page-path')
})

Cookie过期后重新手动复制更新对应值即可。

方案3:自动生成RSA令牌完成全流程登录(适合CI/CD自动化场景)

如果你们的RSA令牌是基于TOTP标准生成,且可以拿到对应的密钥,可直接通过代码生成动态令牌,自动完成整个登录验证流程:

  • 安装TOTP生成依赖:npm install speakeasy --save-dev
  • 在测试用例中添加自动登录逻辑:
const speakeasy = require('speakeasy')
// 从Cypress环境变量读取RSA密钥,不要硬编码到代码中
const getRsaToken = () => {
  return speakeasy.totp({
    secret: Cypress.env('RSA_SECRET'),
    encoding: 'base32'
  })
}
it('完成自动登录验证', () => {
  cy.visit('/login')
  // 输入工作邮箱提交
  cy.get('input[name="work_email"]').type('your-work-email@company.com')
  cy.get('button[type="submit"]').click()
  // 输入自动生成的RSA令牌提交
  cy.get('input[name="rsa_token"]').type(getRsaToken())
  cy.get('button[type="submit"]').click()
  // 验证登录成功后继续执行后续测试逻辑
})

敏感的密钥信息可配置在Cypress环境变量文件或者CI的环境变量配置中,避免泄露。

内容的提问来源于stack exchange,提问作者Jesse Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:39:04