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

如何在Azure DevOps流水线中访问Azure AD登录保护网站执行前端E2E测试?

针对Azure AD保护网站的E2E测试自动化登录方案

以下是几种在Azure DevOps流水线中实现无交互登录的最优方案,可解决MFA阻碍和令牌不识别的问题:

方案1:使用Azure AD服务主体无交互登录

这是自动化场景下最推荐的方案,服务主体无需MFA,权限可控性强:

  • 在Azure AD中注册一个服务主体,为其分配目标网站的访问权限(比如在目标网站的Azure AD应用注册中添加对应应用角色,或在App Service的身份验证设置中允许该服务主体登录)。
  • 在Azure DevOps流水线中,通过Azure CLI获取针对目标网站的访问令牌:
    az account get-access-token --resource <目标网站的Azure AD应用ID>
    
  • 将获取到的令牌注入E2E测试工具(如Cypress、Playwright),通过设置请求头Authorization: Bearer <token>直接访问受保护页面,或模拟前端应用的登录状态(将令牌存入localStorage/sessionStorage)。
  • 注意:确保目标网站的Azure AD认证配置允许服务主体登录,且未对该主体强制MFA。

方案2:创建豁免MFA的专用测试用户

如果需要模拟真实用户的操作流程,可采用此方案:

  • 在Azure AD中创建专门的测试用户,分配目标网站的访问权限。
  • 在Azure AD的条件访问策略中,为该测试用户(或流水线的固定IP范围)配置MFA豁免规则,避免登录时出现验证码。
  • 在Azure DevOps的安全库中存储测试用户的用户名和密码,在E2E测试脚本中自动填充登录表单,完成无交互登录。

方案3:使用ROPC流获取令牌(仅适用于测试环境)

ROPC流允许直接通过用户名密码获取令牌,无需交互,但微软不推荐用于生产环境:

  • 在目标网站的Azure AD应用注册中,启用Resource Owner Password Credentials流(在「身份验证」→「高级设置」中开启)。
  • 在流水线中发送POST请求获取令牌:
    POST https://login.microsoftonline.com/<租户ID>/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    client_id=<你的应用ID>&client_secret=<应用密钥>&username=<测试用户名>&password=<测试密码>&grant_type=password&scope=<目标网站的scope>
    
  • 将返回的access_token用于E2E测试的身份验证,比如注入请求头或前端存储。

解决令牌不被识别的常见问题

你之前遇到的令牌无效问题,通常是以下原因导致:

  • 令牌的资源ID/scope不匹配:确保获取令牌时指定的resource或scope是目标网站的Azure AD应用ID,而非其他资源(如Azure Management API)。
  • 目标网站的认证配置未允许对应的主体:检查服务主体或测试用户是否被添加到目标应用的允许登录列表,或是否拥有对应的访问权限。
  • 令牌已过期:确保在测试前实时获取令牌,而非使用缓存的过期令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:09:19