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

使用Cypress无法绕过Amazon Cognito身份认证的问题求助

问题排查思路
  • 检查AWS Cognito用户池的应用客户端设置:确认允许的回调URL、登出URL是否完全匹配你测试环境的应用地址,域名、端口、路径尾的斜杠都要严格一致,配置不匹配会导致Cognito拒绝回传凭证。
  • 校验凭证回传逻辑:确认输入凭证跳转回应用时,回调URL的参数中是否携带Cognito返回的code/id_token参数,如果参数存在则检查应用是否正确提取该参数,并存到localStorage、sessionStorage或Cookie中,No authorization token was found报错90%以上是应用未成功拿到Cognito返回的凭证。
  • 核对后端CORS配置:确认后端接口是否允许请求携带Authorization头,以及跨域规则中是否开启了凭证传输支持。
  • 确认测试域名白名单:如果Cypress测试使用的是自定义测试域名,需要将该域名添加到Cognito用户池的允许域名列表中,否则Cognito会拦截凭证回传请求。
Cypress适配AWS Cognito认证流程方案

Cypress默认有跨域操作限制,不推荐直接操作Cognito托管的第三方登录页,最佳实践是直接调用Cognito接口获取凭证,注入到应用存储中跳过页面跳转步骤:

  1. 配置Cognito环境变量,在cypress.config.js中添加如下配置:
const { defineConfig } = require("cypress");
module.exports = defineConfig({
  e2e: {
    experimentalSessionAndOrigin: true,
    env: {
      cognitoDomain: "你的Cognito认证域名",
      cognitoClientId: "你的Cognito应用客户端ID",
      testUser: "测试用账号",
      testPassword: "测试用密码"
    }
  },
});
  1. 新增Cypress自定义登录命令,在cypress/support/commands.js中添加如下代码:
Cypress.Commands.add('cognitoLogin', () => {
  // 调用Cognito OAuth2接口直接获取凭证
  return cy.request({
    method: 'POST',
    url: `https://${Cypress.env('cognitoDomain')}/oauth2/token`,
    form: true,
    body: {
      grant_type: 'password',
      client_id: Cypress.env('cognitoClientId'),
      username: Cypress.env('testUser'),
      password: Cypress.env('testPassword'),
      scope: 'openid email profile' // 可根据应用实际配置调整
    }
  }).then(res => {
    const { id_token, access_token, refresh_token } = res.body
    // 将token写入应用对应的存储位置,和你业务应用的存储逻辑保持一致即可
    window.localStorage.setItem('cognitoIdToken', id_token)
    window.localStorage.setItem('cognitoAccessToken', access_token)
    window.localStorage.setItem('cognitoRefreshToken', refresh_token)
  })
})
  1. 测试用例中直接调用登录命令:
describe('登录后功能测试', () => {
  it('访问首页无权限报错', () => {
    // 先调用登录接口注入凭证
    cy.cognitoLogin()
    // 再访问应用地址,此时应用可直接读取到存储中的token,无需跳转登录页
    cy.visit('/')
    cy.contains('应用首页正常内容').should('be.visible')
  })
})

若你的应用使用Cookie存储凭证,只需将上述localStorage写入逻辑替换为Cookie写入逻辑即可;如果必须要走Cognito托管页面的操作流程,开启experimentalSessionAndOrigin配置后即可直接操作Cognito页的输入框、登录按钮,该方式适配性更强但稳定性低于API调用方案。

内容的提问来源于stack exchange,提问作者Taimoor Pasha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:21:03