JMe的JSON Web令牌生成器

Iry*_*yna 5 java json jmeter beanshell jwt

我正在尝试将API调用返回的JWT值与JMeter中的预期有效值进行比较.为此,我需要在预处理器(BSF预处理器或Bean shell预处理器)中生成预期值,然后将其与从呼叫响应值中提取的值进行比较.以前有人创造过类似的东西吗?我目前使用http://jwt.io/手动生成期望值,但是想在JMeter中动态生成这些值.

Ali*_*lik 2

不幸的是,目前 JMeter 中还没有现成的解决方案来处理 JWT 签名的请求。

看起来您至少有以下选择:

  1. 尝试使用加特林而不是 JMeter。Gattle 已经为此有效负载实现了扩展 - gadling-jwt - 但似乎它目前仅支持 GET 请求。

  2. 也许您可以尝试使用JWT 的任何 java 实现来扩展标准 HTTP 请求采样器或自定义REST 采样器以及 JWT 签名 - 就像在 OAuth 有效负载的OAuth 采样器插件中完成的那样。 但它可能看起来相当复杂,需要一点开发经验,并且不容易出错 - 不准确的实现可能会导致性能下降并影响您的测试结果。

  3. 您在问题中提到的使用预处理器和后处理器进行 JWT 签名和响应验证的方法似乎是合理的妥协。
    当我遇到同样的问题时,我的第一个也是相当成功的方法是使用预处理器和后处理器。
    需要注意的几点:

    • 出于性能原因,使用 JSR233(预处理器后置处理器)+ Groovy 而不是 Beanshell(详细信息您可以查看这篇文章);
    • 从可用列表中选择任何稳定的 JWT java 实现;
      我使用过jjwt,发现它足够好并且易于使用;
    • 在 PreProcessor 中执行请求正文 JWT 签名,将签名的正文存储到变量中,将其作为正文数据与 HTTP 请求一起发送,并在 PostProcessor 中解码响应;
      HTTP Request  // 您的 http 调用
      Body Data = ${jwtSignedBody} // 请求正文已在预处理器中签名的变量
          JSR233 PreProcessor  // 在此处签署您的正文数据并放入变量
          JSR233 PostProcessor  // 解码 JWT 签名的响应
      
    • 它对于调试和进一步处理以使用上面的脚本中的解码响应更新后置处理器响应主体可能非常有用。