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

如何用JMeter处理MSAL SSO?动态生成ey开头的STATE值

在JMeter中生成以ey开头的MSAL State值

MSAL中以ey开头的state本质是Base64URL编码的JSON对象(JWT的结构特征,Base64URL编码后的JSON通常以ey开头)。你可以通过JMeter的__groovy()函数结合JSON构建、Base64URL编码来实现动态生成,以下是具体方案:

基础实现(生成带随机值的state)

直接使用Groovy脚本生成包含随机标识的JSON,再进行Base64URL编码(去掉末尾填充字符),确保结果以ey开头:

${__groovy(import groovy.json.JsonBuilder; import java.util.Base64; def json = new JsonBuilder({random: UUID.randomUUID().toString()}).toString(); def encoder = Base64.getUrlEncoder().withoutPadding(); encoder.encodeToString(json.getBytes("UTF-8")),)}

这段代码会生成类似eyJhcmciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...的唯一state值,每次请求都会更新。

自定义字段实现(包含业务所需参数)

如果需要在state中嵌入自定义内容(比如redirect_uri、关联的nonce等),可以修改JSON结构:

${__groovy(import groovy.json.JsonBuilder; import java.util.Base64; def stateData = [
    redirectUri: "https://your-app-domain.com/callback",
    nonce: vars.get("nonce"),
    random: UUID.randomUUID().toString()
]; def json = new JsonBuilder(stateData).toString(); def encoder = Base64.getUrlEncoder().withoutPadding(); encoder.encodeToString(json.getBytes("UTF-8")),)}

这里直接复用你已生成的nonce变量,同时添加业务需要的参数,生成的state依然符合ey开头的格式要求。

关键说明

  • Base64URL编码是JWT的标准编码方式,替换了+、/为-、_,并移除末尾的=填充,确保state可以安全地作为URL参数传递。
  • 合法JSON对象的Base64URL编码结果必然以ey开头(JSON对象首字符{的Base64URL编码对应ey)。

内容的提问来源于stack exchange,提问作者Karan Raj Wagh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:00:03