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

如何使用Cypress实现AWS Cognito的Google OAuth登录测试?

Cypress实现AWS Cognito Google OAuth程序化登录方案

解决思路

既然你已经能通过Cypress拿到Google的ID Token,直接绕开前端点击登录的方式,调用AWS Cognito的AdminInitiateAuth API,用Google的身份凭证换取Cognito的用户会话即可,完全避开Google的点击伪造防护。

具体步骤

1. 配置AWS环境参数

在cypress.env.json里添加Cognito相关配置:

{
  "cognitoUserPoolId": "us-east-1_xxxxxxxxx",
  "cognitoClientId": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
  "awsRegion": "us-east-1",
  "googleProviderName": "Google" // 对应Cognito身份池里配置的Google提供商名称
}

2. 添加自定义Cypress命令

在cypress/support/commands.js中编写登录命令,引入AWS SDK并调用Cognito API:

import { CognitoIdentityProviderClient, AdminInitiateAuthCommand } from "@aws-sdk/client-cognito-identity-provider";

Cypress.Commands.add('loginWithGoogleCognito', (googleIdToken) => {
  const cognitoClient = new CognitoIdentityProviderClient({
    region: Cypress.env('awsRegion')
  });

  const authParams = {
    UserPoolId: Cypress.env('cognitoUserPoolId'),
    ClientId: Cypress.env('cognitoClientId'),
    AuthFlow: 'ADMIN_NO_SRP_AUTH',
    AuthParameters: {
      ID_TOKEN: googleIdToken,
      PROVIDER_NAME: Cypress.env('googleProviderName')
    }
  };

  return cognitoClient.send(new AdminInitiateAuthCommand(authParams))
    .then(res => {
      // 把Cognito令牌存入存储,匹配你的应用实际使用的键(以Amplify为例)
      const { IdToken, AccessToken, RefreshToken } = res.AuthenticationResult;
      window.localStorage.setItem('amplify-id-token', IdToken);
      window.localStorage.setItem('amplify-access-token', AccessToken);
      window.localStorage.setItem('amplify-refresh-token', RefreshToken);
      // 其他可能需要的存储项,可根据应用实际情况添加
    });
});

3. 编写测试用例

结合你已有的Google登录方法,完成端到端测试:

describe('Google OAuth登录验证', () => {
  it('成功通过Google凭证获取Cognito会话并访问应用', () => {
    // 调用你已实现的Google API登录方法,获取ID Token
    cy.loginByGoogleApi().then(googleIdToken => {
      // 换取Cognito会话
      cy.loginWithGoogleCognito(googleIdToken);
      // 访问应用受保护页面
      cy.visit('/dashboard');
      // 验证登录状态
      cy.get('#user-avatar').should('be.visible');
    });
  });
});

关键注意点

  • Cognito客户端权限:确保你的Cognito应用客户端已启用ADMIN_NO_SRP_AUTH认证流程(在Cognito控制台的应用客户端设置里开启)。
  • 存储键匹配:不同应用存储Cognito令牌的键名可能不同,打开浏览器开发者工具查看你的应用实际存在localStorage/sessionStorage里的键,替换代码中的对应项。
  • AWS权限控制:用于调用AdminInitiateAuth的IAM凭证必须拥有cognito-idp:AdminInitiateAuth权限,建议使用测试专用IAM用户,最小化权限。
  • Google Token有效性:确保获取的Google ID Token的受众(aud字段)与你在Cognito中配置的Google客户端ID一致,且未过期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:25:29