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

JMeter中无法获取Microsoft Online认证token问题求助

Azure AD登录JMeter无法获取响应头Token问题排查

问题详情

我的应用登录流程如下:

  • 访问应用URL
  • 自动重定向至Microsoft Online登录页
  • 输入用户名,点击Next
  • 输入密码,点击SignIn
  • 在“Stay signed in?”弹窗点击Yes
  • 浏览器返回302状态码,响应头包含Token

但在JMeter中执行时:

  • 接口返回200 OK
  • 响应头里找不到Token
  • 已完成所有输入参数的关联,Postman可以正常获取Token
  • 试过以下方法都没用:
    • 切换“Follow Redirects”选项的勾选状态
    • 切换“Redirect Automatically”选项的勾选状态
    • 用第三方教程方法拿到Token,但无法执行需要用户权限的功能

排查方案

1. 手动处理重定向,不依赖JMeter自动跳转

JMeter默认的自动重定向会跳过中间302响应的细节,导致看不到Token所在的响应头。可以这么做:

  • 取消勾选HTTP请求的Follow Redirects和Redirect Automatically选项
  • 拆解登录流程为独立的HTTP请求取样器,依次模拟每一步跳转:
    1. 请求初始应用URL,提取跳转至Microsoft Online的地址
    2. 请求Microsoft Online登录页,提取表单隐藏参数(如__RequestVerificationToken)
    3. 提交用户名的请求
    4. 提交密码的请求
    5. 处理“Stay signed in”的确认请求
    6. 请求最终跳转回应用的地址,此时检查该请求的响应头,Token应该在这里

2. 对比Postman与JMeter的请求差异

Postman能成功拿到Token,说明请求参数、Cookie、请求头是正确的。可以通过以下方式对齐:

  • 在Postman中开启请求日志,导出完整的请求序列(包含所有跳转步骤)
  • 用JMeter的HTTP(S) Test Script Recorder录制Postman的登录流程,对比两者的请求:
    • 检查Cookie是否完全一致(尤其是Azure AD的会话Cookie)
    • 确保User-Agent、Referer等请求头字段和浏览器/Postman保持一致
    • 核对提交的表单参数,包括所有隐藏字段,避免遗漏

3. 排查会话验证与权限问题

如果用第三方方法拿到的Token无法执行权限功能,大概率是Token的受众(aud)、权限范围(scp)或会话上下文不对:

  • 检查Token的payload(可用JWT解码工具查看),确认aud是否匹配应用的客户端ID,scp是否包含所需权限
  • 确保JMeter的请求中携带了完整的会话Cookie,避免Token与会话上下文不匹配
  • 如果应用启用了MFA或设备验证,需要在JMeter中添加对应的处理步骤(如手动输入验证码)

4. 确认Token的实际位置

浏览器里的302响应头Token,可能是在最后一步跳转回应用时返回的。JMeter自动跟随重定向后,会直接显示最终应用页面的200响应,导致看不到中间的302响应头。可以:

  • 在JMeter的查看结果树中,展开所有请求的重定向步骤,逐个检查响应头
  • 使用正则表达式提取器,针对正确的302响应步骤提取Token

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:12:46