You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter中生成Code Verifier与Code Challenge遇问题,求修复

JMeter生成Code Verifier和Code Challenge修复方案

一、可直接运行的Groovy代码(JSR223元件中使用)

import java.security.SecureRandom
import java.util.Base64
import java.security.MessageDigest

// 生成符合RFC 7636规范的Code Verifier
def secureRandom = new SecureRandom()
byte[] verifierBytes = new byte[32]
secureRandom.nextBytes(verifierBytes)
def codeVerifier = Base64.getUrlEncoder().withoutPadding().encodeToString(verifierBytes)

// 生成SHA-256类型的Code Challenge
MessageDigest digest = MessageDigest.getInstance("SHA-256")
byte[] challengeBytes = digest.digest(codeVerifier.getBytes("UTF-8"))
def codeChallenge = Base64.getUrlEncoder().withoutPadding().encodeToString(challengeBytes)

// 存入JMeter变量,供后续HTTP请求调用
vars.put("code_verifier", codeVerifier)
vars.put("code_challenge", codeChallenge)

二、原代码常见问题及修复点

  • 语言选择错误:别用BeanShell,JMeter推荐JSR223元件+Groovy语言,对Java新API支持更好,性能也更高
  • Base64编码不符合规范:必须用无填充的URL安全Base64(withoutPadding()),RFC 7636明确禁止=填充符
  • 变量未正确存储:一定要用vars.put()把生成的字符串存入JMeter上下文,否则后续HTTP请求拿不到值
  • 哈希算法错误:Code Challenge必须用SHA-256(即S256方法),这是OAuth 2.0 PKCE流程的标准要求

三、使用步骤

  1. 在需要调用变量的HTTP请求前面,添加「JSR223 PreProcessor」(比Sampler更适合前置生成变量)
  2. 把上述代码粘贴到PreProcessor的「Script」输入框,确保语言选择为Groovy
  3. 在HTTP请求的参数、请求头或请求体中,用${code_verifier}和${code_challenge}直接引用变量
  4. 可添加「Debug Sampler」查看变量是否生成成功,验证值的格式是否符合要求

内容的提问来源于stack exchange,提问作者Hemlata Nayak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:01:18