Jmeter登录报403错误:无法定位Xsrf-Token的生成位置
JMeter登录403问题排查解决方案
问题核心
目标站点鉴权逻辑已变更:原流程通过login[OPTIONS]请求获取Cookie及Token,现在login[OPTIONS]响应不再返回Token,而前端会提前获取Xsrf-Token并携带到login[POST]请求中,导致JMeter按旧流程执行时因缺失Token触发403错误。
排查与解决步骤
- 抓包定位Token来源:打开浏览器F12的Network面板,清空现有请求后刷新登录页,重点排查以下内容:
- 页面初始加载的HTML文档响应:查看是否有
<meta name="csrf-token" content="xxx">这类标签,Token可能藏在其中。 - 页面加载时的Cookie响应头:检查
Set-Cookie字段里是否包含XSRF-TOKEN这类键值对。 - 登录页加载时的前置接口请求:是否存在专门返回Token的接口(比如
/get-token这类)。 - 前端存储:在F12的Application面板,查看LocalStorage/SessionStorage里是否有Token相关的存储项。
- 页面初始加载的HTML文档响应:查看是否有
- 在JMeter中提取Token:
- 若Token在HTML的meta标签中:给页面加载请求添加
CSS/JQuery提取器,用表达式meta[name='csrf-token']@content提取;或用正则表达式提取器,表达式写<meta name="csrf-token" content="(.+?)">,将结果存为变量(比如${xsrf_token})。 - 若Token在Cookie响应头中:确保
HTTP Cookie Manager勾选Save cookies,直接从Cookie中读取对应Token值,或用提取器单独提取。 - 若Token由前端JS生成:找到对应生成逻辑的JS代码,复制到JMeter的
JSR223 PreProcessor中执行,生成Token后存为变量。
- 若Token在HTML的meta标签中:给页面加载请求添加
- 配置POST请求头部:在
login[POST]请求的HTTP信息头管理器中,添加键为Xsrf-Token(需与UI请求头键名完全一致,注意大小写)、值为提取到的变量(如${xsrf_token})的头部项。 - 校验OPTIONS请求必要性:部分站点的OPTIONS请求是浏览器自动发送的预检请求,JMeter中可尝试直接发送POST请求,让JMeter自动处理预检逻辑;或对照抓包结果,确认是否仍需手动发送OPTIONS请求。
- 检查Cookie管理器配置:确保
HTTP Cookie Manager的作用域覆盖所有登录相关请求,若站点Cookie设置了SameSite属性,需在Cookie管理器中对应配置。
内容的提问来源于stack exchange,提问作者Mzee Bakari
相关产品推荐
相关产品推荐

