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

问题描述 投票:0回答:3

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

java rest performance-testing load-testing siege
3个回答
3
投票

您可以使用 Jmeter 来测试 JWT Secured Rest API。

您可以将 jwt 令牌与请求一起包含在“HTTP 标头管理器”中。

参考:http://jmeter.apache.org/usermanual/build-adv-web-test-plan.html#header_manager


3
投票

我会建议以下配置:

  1. jjwt jar 连同依赖项(jackson-databind)放在 JMeter Classpath 下(只需将 jar 放入 JMeter 安装的“lib”文件夹中,然后重新启动 JMeter 以获取它们)

  2. 添加 HTTP 请求 采样器并将其配置为发送您的 API 请求。

  3. 添加 HTTP 标头管理器 作为 HTTP 请求采样器的子项。

  4. 添加 JSR223 PreProcessor 作为 HTTP 请求采样器的子项。

  5. 将以下代码放入JSR223 PreProcessor“脚本”区域:

    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,它将 registered claim 子(主题)设置为

Joe
并添加具有
Authorization
值的
Bearer %generated token string%
标头到 HTTP 请求。

您需要根据需要修改代码,但概念应该是相同的。如果需要,请联系您的应用程序开发人员寻求帮助。

参考资料:


0
投票

我会建议Gopayloader。它是一个用 Go 编写的 HTTP 负载测试器,使用 JWTS 可以达到大约 50k RPS。

它通过提供私钥来签署 JWT 来生成自定义 JWT,即

./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

"jti" : "8f2d1472-084c-4662-ae74-04e0f1de4993"

这可能很有用,因为某些 JWT 身份验证服务不允许重复使用相同的 JWT,因为它只能使用一次以防止重放攻击,请参阅:https://www.rfc-editor.org/rfc/rfc7519#第 4.1.7 节.

© www.soinside.com 2019 - 2024. All rights reserved.