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

如何提取OAuth2的code与code verifier以传入Token API负载

在JMeter中实现OAuth2 PKCE流程的动态参数生成

1. 先搞懂核心参数逻辑

这是OAuth2的PKCE授权码流程,后端提到的Keytool是服务端用于密钥管理的工具,客户端侧完全不需要依赖它,自己就能生成两个关键参数:

  • code_verifier:43-128位的随机高熵字符串,仅允许包含a-zA-Z0-9~-_ .字符
  • code_challenge:将code_verifier做SHA-256哈希运算后,转成不带填充的Base64URL编码字符串

2. 生成code_verifier(用Groovy脚本)

在JMeter中添加一个JSR223 PreProcessor(或JSR223 Sampler),粘贴以下脚本:

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

def secureRandom = new SecureRandom()
def bytes = new byte[32]
secureRandom.nextBytes(bytes)
def codeVerifier = Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)
vars.put("code_verifier", codeVerifier)

运行后,生成的code_verifier会存入JMeter变量,后续用${code_verifier}即可引用。

3. 生成对应的code_challenge

在生成code_verifier的元件之后,再添加一个JSR223 PreProcessor,用以下脚本生成code_challenge:

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

def codeVerifier = vars.get("code_verifier")
def md = MessageDigest.getInstance("SHA-256")
def digest = md.digest(codeVerifier.getBytes("UTF-8"))
def codeChallenge = Base64.getUrlEncoder().withoutPadding().encodeToString(digest)
vars.put("code_challenge", codeChallenge)

该脚本会自动读取之前生成的code_verifier,计算出对应的code_challenge并存入变量。

4. 获取授权码(code参数)

接下来需要调用授权端点(Authorization Endpoint),请求参数必须包含:

  • response_type=code
  • client_id=你的客户端ID
  • redirect_uri=你配置的回调地址
  • code_challenge=${code_challenge}
  • code_challenge_method=S256(因为我们采用SHA-256哈希算法)
  • 额外的scope等参数(根据你的应用要求填写)

如果授权流程需要用户登录页面交互,就用JMeter的WebDriver Sampler模拟浏览器操作;如果是后台可直接调用的端点,用HTTP Request Sampler发送请求即可。拿到响应后,用正则表达式提取器把code值提取出来,存入JMeter变量(比如${code})。

5. 调用Token API获取AccessToken

最后在Token API的请求负载中,填入动态参数:

  • grant_type=authorization_code
  • code=${code}(刚才提取的授权码)
  • code_verifier=${code_verifier}
  • client_id=你的客户端ID
  • redirect_uri=和授权请求一致的回调地址
  • 其他必填参数(比如client_secret,若你的应用要求的话)

6. 验证参数正确性

可以添加一个Debug Sampler,运行后查看生成的code_verifier和code_challenge:

  • code_verifier长度需在43-128位之间
  • code_challenge不能包含Base64的填充符号=

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:46:07