java 如何对JWT Secured Rest API进行负载测试

46scxncf  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(132)

我正在用Spring开发一个REST API(HTTPS),现在需要对1000个并发用户进行负载测试。问题是我使用了siege来进行负载测试,但它不能在jwt令牌头上进行测试。在我的场景中执行负载测试的最佳方法是哪种?

wgxvkvu9

wgxvkvu91#

您可以使用Jmeter测试JWT Secured Rest API。
您可以将jwt令牌与请求沿着包含在“HTTP头管理器”中。
参考: www.example.com

nbysray5

nbysray52#

我建议使用以下配置:
1.将jjwt jar沿着依赖项(jackson-databind)放在JMeter Classpath下(只需将jar文件放到JMeter安装的“lib”文件夹中,然后重新启动JMeter来拾取它们)
1.添加HTTP请求采样器并配置它以发送API请求。
1.添加HTTP头管理器作为HTTP请求采样器的子项。
1.添加JSR223预处理器作为HTTP请求采样器的子项。
1.将以下代码放入JSR223预处理器“脚本”区域:

import io.jsonwebtoken.Jwts
import io.jsonwebtoken.SignatureAlgorithm
import io.jsonwebtoken.impl.crypto.MacProvider
import org.apache.jmeter.protocol.http.control.Header
import java.security.Key

def key = MacProvider.generateKey();

def compactJws = Jwts.builder()
    .setSubject('Joe')
    .signWith(SignatureAlgorithm.HS512, key)
    .compact()

sampler.getHeaderManager().add(new Header('Authorization', 'Bearer ' + compactJws))

上面的代码将生成一个JSON Web Token,它将注册的声明子(主题)设置为Joe,并将值为Bearer %generated token string%Authorization头添加到HTTP请求中。
您需要根据需要修改代码,但概念应该相同。如果需要,请联系您的应用程序开发人员寻求帮助。
参考文献:

uklbhaso

uklbhaso3#

我建议使用gopayloader https://github.com/domsolutions/gopayloader,这是一个用Go语言编写的HTTP负载测试器,可以通过JWTS实现大约50 k的RPS。
它通过提供一个私钥来签名JWT i,从而生成定制的JWT。e.

./gopayloader run http://localhost:8081 -c 150 -r 1000000 --jwt-header "my-jwt" --jwt-key ./private-key.pem --jwt-kid 3434645743124 --jwt-sub "my-subject" --jwt-aud "some-audience" --jwt-iss "some-issuer"

会生成一个JWT体,如下所示:

{
  "aud": "some-audience",
  "exp": 1714130039,
  "iss": "some-issuer",
  "jti": "05181473-bbd6-4d21-8942-d86c2e972b2b",
  "sub": "my-subject"
}

带表头;

{
  "alg": "ES256",
  "kid": "3434645743124",
  "typ": "JWT"
}

它预先生成JWT并在运行测试之前将其保存到磁盘,以保持低内存占用并实现高RPS,因为CPU周期专用于发送请求而不是生成JWTS。每个JWT都是唯一的,因为它有自己的jti i。e.
"jti" : "8f2d1472-084c-4662-ae74-04e0f1de4993"
这可能很有用,因为某些JWT身份验证的服务不允许重用相同的JWT,因为它只应该被使用一次以防止重放攻击,请参见 www.example.com

相关问题