JMeter中Azure OAuth2认证失败问题求助
Azure OAuth2登录JMeter脚本BssoInterrupt问题排查方案
一、检查请求参数完整性
- 确认POST密码请求携带所有必要参数:除密码外,需确保从第一步GET请求捕获的
sCtx、flowToken、canary,以及client_id、redirect_uri等参数完整且正确传递,尤其是canary参数,Azure对其会话匹配性校验严格,必须与当前会话完全一致。 - 核对请求头配置:确保
Content-Type设为application/x-www-form-urlencoded,同时携带登录页面返回的X-CSRF-Token(若存在),并配置与真实浏览器一致的User-Agent——Azure认证服务器会校验该字段,非标准UA可能触发拦截。
二、会话Cookie一致性校验
- 验证Cookie传递完整性:查看密码请求的Cookie列表,确认包含第一步登录页面返回的
ESTSAUTH、ESTSAUTHPERSISTENT等关键Cookie,BssoInterrupt通常与会话状态不一致相关,可能是Cookie丢失或过期导致。 - 调整Cookie Manager设置:禁用“清除每个线程组的Cookie”选项,确保会话Cookie在整个测试流程中持续有效。
三、BssoInterrupt场景针对性处理
- BssoInterrupt是Azure的单点登录中断机制,触发原因可能包括:
- 账号启用了条件访问策略(如要求特定地理位置、设备合规性)
- 请求频率过高被判定为自动化工具
- 可在登录流程前添加
GET https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/logout请求,清除旧会话后再重新执行登录流程,避免旧会话干扰。
四、模拟真实浏览器行为
- 配置HTTP Header Manager:完全复制真实浏览器的请求头(包括
Accept、Accept-Language、Referer等),其中Referer必须设为前一步登录页面的URL,否则Azure会拒绝请求。 - 添加请求延迟:在每个请求间设置1-2秒定时器,模拟用户操作间隔,规避反自动化拦截。
五、参数捕获准确性验证
- 用View Results Tree检查第一步GET请求响应:确认
sCtx、flowToken、canary等参数从正确位置捕获(比如canary通常在页面隐藏input中,name属性为canary),避免XPath或正则表达式提取器匹配错误值。 - 检查参数编码:部分参数(如
sCtx)需URL编码,确保传递时无乱码。
内容的提问来源于stack exchange,提问作者Rodrigo Camino
相关产品推荐
相关产品推荐

