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

如何使用JMeter 5.4.1生成OAuth 2.0的authorization与access令牌

JMeter 5.4.1 生成OAuth 2.0令牌的可行方案

以下两种方案均兼容JMeter 5.4.1版本,无需依赖已废弃的OAuth Sampler插件即可实现OAuth 2.0令牌生成:

方案1:使用内置HTTP请求组件(最推荐,无额外依赖)

  • 先根据你使用的OAuth 2.0授权类型(授权码模式/客户端模式/密码模式等)构造对应授权请求:
    若使用授权码模式,先发送GET请求到授权服务的授权端点,携带client_id、redirect_uri、response_type=code、scope等必填参数,请求成功后从返回内容或重定向地址中提取authorization code。
    若使用客户端模式/密码模式,可跳过获取code的步骤,直接构造令牌请求。
  • 构造POST请求到授权服务的令牌端点,请求头设置Content-Type: application/x-www-form-urlencoded,请求体根据授权类型携带对应参数:
    授权码模式需携带grant_type=authorization_code、code(上一步提取的授权码)、client_id、client_secret、redirect_uri;
    客户端模式需携带grant_type=client_credentials、client_id、client_secret、scope;
    密码模式需携带grant_type=password、username、password、client_id、client_secret。
  • 使用JMeter内置的JSON提取器或正则表达式提取器,从令牌接口的返回结果中提取access_token、refresh_token、expires_in等字段,存入JMeter变量后即可在后续业务接口中直接引用。

提示:如果授权接口有防爬、验证码等校验,可提前配置好Cookie管理器、Header管理器处理身份上下文。

方案2:使用JSR223组件自定义实现(适合有特殊加密/签名要求的场景)

如果你的OAuth 2.0流程有自定义签名、参数加密等特殊要求,可以用Groovy脚本手动实现令牌生成逻辑:

  • 新增JSR223 PreProcessor或JSR223 Sampler,脚本语言选择Groovy(JMeter 5.4.1已内置Groovy支持,无需额外安装插件)
  • 按照你的OAuth 2.0规范拼接参数、生成签名后发送请求,参考脚本如下:
import groovy.json.JsonSlurper
import java.net.URLEncoder

// 配置基础参数
def tokenEndpoint = "你的令牌端点地址"
def clientId = "你的客户端ID"
def clientSecret = "你的客户端密钥"
def grantType = "client_credentials"
def scope = "你申请的权限范围"

// 构造请求参数
def params = [
    client_id: clientId,
    client_secret: clientSecret,
    grant_type: grantType,
    scope: scope
]

// 发送POST请求获取令牌
def post = new URL(tokenEndpoint).openConnection()
post.setRequestMethod("POST")
post.setDoOutput(true)
post.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
def out = new OutputStreamWriter(post.getOutputStream())
out.write(params.collect { k, v -> "${k}=${URLEncoder.encode(v, 'UTF-8')}" }.join("&"))
out.flush()
out.close()

// 解析返回结果并将令牌存入JMeter变量
if (post.getResponseCode() == 200) {
    def tokenResp = new JsonSlurper().parse(post.getInputStream())
    vars.put("access_token", tokenResp.access_token as String)
    vars.put("expires_in", tokenResp.expires_in as String)
}

提示:脚本中的敏感信息(比如client_secret、账号密码)建议通过JMeter属性、用户定义变量等方式配置,不要硬编码在脚本中,避免信息泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:27:03