维护JMeter中对Keycloak的HTTP请求之间的状态

时间:2018-07-03 12:41:39

标签: jmeter keycloak

因此,我正在尝试使JMeter脚本自动化,该脚本创建Keycloak用户,然后对其进行登录。

首先,它获取登录页面并存储代码,这是一个示例请求:

GET http://Keycloak.com:8001//auth/realms/REALM/protocol/openid-connect/auth?response_type=code&client_id=CLIENT&scope=openid%20profile%20email&nonce=N5b3a2da23c04a&response_mode=form_post&resource=RESOURCE&state=2SJwtlVZrswlGkw&redirect_uri=REDIRECTURI

但是,当我随后获取注册页面时,代码更改,并且tab_id也更改。我该如何防止密钥斗篷在线程中的每个HTTP请求中生成新的代码令牌?

此外,为什么每个带有JMeter的HTTP请求都像一个新会话,而不是一系列中的下一个请求?


编辑:

除了对线程使用HTTP Cookie管理器和HTTP缓存管理器之外,我还使用正则表达式提取器来跟踪代码和执行变量。

看着我的POST请求,两个变量都与上一个HTTP请求中的变量相同,并且所有cookie都得到了维护,但是每次我尝试进行这种自动登录时,都会收到400错误和keycloak事件日志显示一个invalid_code错误。


编辑: 根据要求,这里是我所有登录请求的屏幕截图 enter image description here

3 个答案:

答案 0 :(得分:4)

您的正则表达式提取器很可能未嵌套在您尝试从中提取数据的HTTP请求中。

如果范围太广,它将应用于所有HTTP请求,因此第一次成功提取,但是随后对于下一个不包含令牌的请求,提取器将运行并用一个空值覆盖旧值。

请参阅JMeter中的范围规则:

答案 1 :(得分:2)

您需要保持匹配之间的关联。请浏览下面的博客

  

https://www.blazemeter.com/blog/how-to-handle-correlation-in-jmeter

答案 2 :(得分:0)

根据keycloak,如果您使用的是keycloak.com

,则必须使用 https
  

只要您坚持使用私有IP地址(例如localhost,127.0.0.1、10.0.x.x,192.168.x.x和172..16.x.x),Keycloak就可以在没有SSL的情况下立即使用。如果您未在服务器上配置SSL / HTTPS,或者尝试从非私有IP地址通过HTTP访问Keycloak,则会收到错误消息。

因此,您有3个选择:使用私有IP地址,使用反向代理或负载平衡器来为Keycloak服务器处理HTTPS或启用HTTPS。