从 Base64 解码字符串中提取密钥

Extract a key from a Base64 decoded string

我正在尝试使用 BeanSheel PostProcessor 解码 JMeter 中的 base 64 格式字符串,并从字符串中提取 nameid,我将在发送另一个请求时进一步使用它 (nameid)。

我尝试了以下代码,但它不起作用。

import org.apache.commons.codec.binary.Base64;

String decoded_response = new String(Base64.decodeBase64(data));
String memberId = decoded_response.nameid;
log.info("memberid", memberId)

它给我的错误是:

ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import org.apache.commons.codec.binary.Base64;  String decoded_response = new St . . . '' : Typed variable declaration : Cannot access field: nameid, on object: iDzÏí¢G§{"typ":"JWT","alg":"HS256"}{"nameid":"1862","unique_name":"user1@mywebsite.com","iss":"http://mywebsite-app.azurewebsites.net/","aud":"414e1927a3884f68abc79f7283837fd1","exp":1635435731,"nbf":1635349331}$S‘­vC‡öRé™v„2xÉr}ïK…u®KŸäpÏƯ-¢G§þÜ©y·š­êÞƘ«zÏâŸÎ·÷Ö¬rXžžßâvx

基本上我想在这里解码令牌并获取一些 id 字段以用于进一步的请求。这样做的好方法是什么?有没有其他方法可以将 nameid 存储在另一个变量中并在另一个请求中进一步使用它?

  1. 您需要解码 Base64URL,而不是 Base64
  2. 如果成功你会得到需要解析的JSON
  3. Since JMeter 3.1 you're supposed to use JSR223 Test Elements and Groovy language 用于脚本

所以我认为您需要将代码更改为:

def response = prev.getResponseDataAsString()

def parts = response.split('\.')

def part2 = org.codehaus.groovy.runtime.EncodingGroovyMethods.decodeBase64Url(parts[1])

def nameid = new groovy.json.JsonSlurper().parse(part2).nameid

更多信息: