JMeter配置Keycloak登录测试:如何捕获OIDC关键参数?
解决JMeter捕获Keycloak OIDC认证隐藏参数的问题
问题根源
你碰到的核心问题是:JMeter开启Follow Redirects后,会自动跳过中间重定向页面的响应内容。提交登录凭证后,JMeter直接跳转到最终回调页,不会保留login-actions/authenticate这个中间页的HTML,自然拿不到里面的隐藏表单参数。
分步解决办法
1. 关掉自动跟随,手动处理重定向
- 在提交登录凭证的HTTP请求里,取消勾选
Follow Redirects(后续可手动处理跳转)。这样JMeter会保留login-actions/authenticate页面的完整响应,不会直接跳走。 - 新增一个HTTP请求,目标地址填
https://keycloak.mywebsite.com/realms/myrealm/login-actions/authenticate,确保这个请求带上之前的Cookie和会话信息(靠JMeter的Cookie管理器自动维护即可)。
2. 提取隐藏参数的两种有效方式
针对login-actions/authenticate的响应,用下面两种方法提取参数:
方式一:CSS选择器提取器(推荐)
给这个请求添加CSS选择器提取器,分别配置三个规则:
- 提取
code:选择器填input[name="code"],属性选value - 提取
id_token:选择器填input[name="id_token"],属性选value - 提取
session_state:选择器填input[name="session_state"],属性选value
方式二:正则表达式提取器
如果CSS选择器不生效,就用正则匹配:
- 提取
code:正则表达式写<input type="hidden" name="code" value="(.+?)" - 提取
id_token:正则表达式写<input type="hidden" name="id_token" value="(.+?)" - 提取
session_state:正则表达式写<input type="hidden" name="session_state" value="(.+?)"
记得把Template设为$1$,匹配数字选1。
3. 提交隐藏表单完成认证
拿到三个参数后,新增一个HTTP请求,提交到隐藏表单的action指向的业务回调地址,把code、id_token、session_state作为表单参数传进去,同时带上Cookie即可。
Keycloak OIDC流的优化技巧
- 使用JMeter的OIDC插件:直接集成OIDC授权码流程,不用手动折腾表单和参数,插件会自动走完整个认证流程。
- 复刻浏览器请求序列:用F12开发者工具抓一遍完整的登录流程,把所有请求头、Cookie、参数都记下来,在JMeter里完全照搬,确保上下文一致。
- 检查Cookie管理器:所有请求必须共用同一个Cookie管理器,不然会话中断,参数肯定提取失败。
内容的提问来源于stack exchange,提问作者Danilo
相关产品推荐
相关产品推荐

