如何在Cypress脚本中实现MS Teams身份验证?
解决Cypress登录MS Teams的身份验证问题
方法1:通过API获取Token并注入身份验证Cookie
MS Teams依赖微软Azure AD的身份验证Cookie,你可以通过调用OAuth2令牌接口获取有效Token,再将对应的Cookie注入Cypress浏览器实例,跳过登录页。
具体操作:
- 准备Azure AD应用信息:在Azure门户注册应用,获取
tenant_id、client_id,若为机密客户端还需client_secret,并配置好Teams相关权限(如User.Read、TeamsAppInstallation.ReadWriteSelfForUser),确保权限获得管理员同意。 - 在Cypress钩子中请求Token并注入Cookie:
beforeEach(() => { cy.request({ method: 'POST', url: 'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token', form: true, body: { grant_type: 'password', client_id: '{你的client_id}', client_secret: '{你的client_secret}', // 机密客户端必填 username: '{Teams账号}', password: '{Teams密码}', scope: 'https://graph.microsoft.com/.default openid profile offline_access' } }).then((res) => { const idToken = res.body.id_token; // 注入Teams核心身份验证Cookie,可通过浏览器登录后查看完整Cookie列表补充 cy.setCookie('ESTSAUTHPERSISTENT', idToken, { domain: '.microsoft.com', path: '/' }); cy.setCookie('ESTSAUTH', idToken, { domain: '.microsoft.com', path: '/' }); }); }); // 之后访问Teams页面 cy.visit('https://teams.microsoft.com');
方法2:复用已登录会话的Cookie
如果不想处理API调用,可手动登录Teams后导出Cookie,在Cypress中直接注入:
- 手动登录并复制Cookie:打开浏览器登录Teams,通过开发者工具(F12)→ Application → Cookies,筛选
.microsoft.com域名,复制ESTSAUTHPERSISTENT、ESTSAUTH等核心身份验证Cookie的值。 - 在Cypress中注入Cookie:
beforeEach(() => { cy.setCookie('ESTSAUTHPERSISTENT', '{复制的Cookie值}', { domain: '.microsoft.com', path: '/' }); cy.setCookie('ESTSAUTH', '{复制的Cookie值}', { domain: '.microsoft.com', path: '/' }); // 补充其他必要Cookie }); cy.visit('https://teams.microsoft.com');
注意:该方式的Cookie会过期,需定期更新。
关键注意事项
- 密码授权方式(
grant_type=password)仅适用于未开启MFA(多因素认证)的账号,若账号有MFA,需改用设备码授权等支持MFA的认证方式。 - 不同Teams环境可能需要不同的Cookie,建议登录后通过浏览器工具确认所有必要的身份验证Cookie,确保全部注入。
内容的提问来源于stack exchange,提问作者Tomasito
相关产品推荐
相关产品推荐

