amazon-web-services - 如何从 JMeter 生成 AWS 签名?
问题描述
这是我在 JSR223 PreProcessor 中的代码。
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec
import java.security.InvalidKeyException
import java.security.MessageDigest
import groovy.json.JsonSlurper
import java.text.SimpleDateFormat
static byte[] HmacSHA256(String data, byte[] key) throws Exception {
String algorithm="HmacSHA256";
Mac mac = Mac.getInstance(algorithm);
mac.init(new SecretKeySpec(key, algorithm));
return mac.doFinal(data.getBytes("UTF8"));
}
static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName) throws Exception {
byte[] kSecret = ("AWS4" + key).getBytes("UTF8");
byte[] kDate = HmacSHA256(dateStamp, kSecret);
byte[] kRegion = HmacSHA256(regionName, kDate);
byte[] kService = HmacSHA256(serviceName, kRegion);
byte[] kSigning = HmacSHA256("aws4_request", kService);
return kSigning;
}
函数 getSignatureKey 的示例参数值是(这些我作为变量传递给 JSR223 预处理器的参数部分)
key = eC6hEyRSTXMzsG6+juOObz8LbXb36iEYW7PPN1MJ
dateStamp = 20190123T083434Z
regionName = us-west-2
serviceName = test-mlp-us-west-2-4023179c-7708-4c5e-a831-28259b8a8872.s3.us-west-2.amazonaws.com
此代码不起作用且未生成 AWS 签名。
这是我需要获取的示例签名值
Signature=2a6092ec4ff49dc9j3b92d436635a57f312753kcc9f553ce1718b9b1594c4362
1.这段代码有什么问题?2.如何将AWS签名分配给变量并在JMeter中使用?
解决方案
如果“此代码不起作用”,您应该做的第一件事是查看jmeter.log文件- 如果 Groovy 脚本失败,它将包含有关失败的确切原因和原因以及一些修复提示的信息。
我还认为您应该根据请求详细信息(URL、参数、标头等)生成签名
StringToSign =
Algorithm + \n +
RequestDateTime + \n +
CredentialScope + \n +
HashedCanonicalRequest
How to Handle Dynamic AWS SigV4 in JMeter for API Testing中描述了带有示例的整个过程,您可以在GitHub存储库中获得可用作参考的测试计划。
推荐阅读
- r - 使用 Rstudio 删除文件名中的字符
- node.js - Node.js - 使用 axios 调用 OCR 空间 api
- python - Authlib 与 Flask 管理授权,无需重定向
- python - 使用 Pyspark 编写过滤后的 wordcount 函数
- javascript - 在 nodejs 中执行以下操作的更好方法:比较导入的 csv 行或对象数组中是否存在特定键值对
- python - 在 A 列中搜索 dict 键的文本,如果找到,则将 B 列设置为 Pandas 数据框中的 dict 值
- java - java.awt.Window.dispose() 在 Mac OSX 上的 Eclipse RCP 项目中永远挂起
- haskell - Haskell GHCI 重新加载然后评估最后一个表达式
- java - 无法使用 restclienttest 模拟 resttemplate 调用
- spring - Spring RestTemplate,如何处理卡盘传输编码