授权码使用 Jmeter 与 PKCE 流程

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

我使用 jmeter 进行负载测试,网站登录使用带有 PKCE 的授权代码流。我在 Jmeter 脚本的 Signin-oidc 采样器结果中收到 500 响应。所有其他端点都收到 200 响应。

在我的 Jmeter 脚本中,当用户单击登录“/login”时,我会生成代码验证程序和代码质询,并在“/connect/authorize”的请求参数中传递代码质询。我在“Account/Login?ReturnUrl.......”的响应中得到代码,其中我在请求参数中传递了用户名和密码。然后在“/connect/authorize/callback”中,我也传递相同的 codeChallenge 并提取代码值,然后将此代码值与“/login”中生成的代码验证器一起传递给“/signin-oidc”。除“/signin-oidc”之外的所有端点均通过。我犯了什么错误?

testing jmeter authorization load pkce
1个回答
0
投票

也许你的逻辑有问题,即“生成代码验证器和代码挑战”

确保它匹配,即使用 PKCE 页面的授权代码流程调用您的 API

下列出的内容

您可以在 JSR223 PreProcessor 中使用的等效 JMeter 代码如下:

  1. 对于

    code verifier

    import java.security.SecureRandom;
    
    SecureRandom sr = new SecureRandom();
    byte[] code = new byte[32];
    sr.nextBytes(code);
    String verifier = Base64.getUrlEncoder().withoutPadding().encodeToString(code);
    
    log.info('code_verifier: ' + verifier)
    
    vars.put('verifier', verifier)
    
  2. 对于

    code challenge

    import java.security.MessageDigest
    import org.apache.commons.codec.binary.Base64
    
    byte[] bytes = vars.get('verifier').getBytes("US-ASCII");
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    md.update(bytes, 0, bytes.length);
    byte[] digest = md.digest();
    String challenge = Base64.encodeBase64URLSafeString(digest);
    
    log.info('code_challenge: ' + challenge)
    

更多信息:

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