如何从JMeter的AWS签名?

问题描述 投票:0回答:1

下面是我在JSR223预处理代码。

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.How可以在AWS签名分配给一个变量,并在JMeter的使用?

amazon-web-services jmeter
1个回答
0
投票

如果“此代码不能正常工作”,你应该做的第一件事就是寻找到jmeter.log file - 在Groovy脚本失败,它将包含哪些具体失败信息,为什么有的线索来解决的情况下。

我也想你应该生成签名的基础上请求的详细信息(URL,参数,头部等)

StringToSign =
    Algorithm + \n +
    RequestDateTime + \n +
    CredentialScope + \n +
    HashedCanonicalRequest

Create a String to Sign for Signature Version 4

举例整个过程中How to Handle Dynamic AWS SigV4 in JMeter for API Testing描述,你可以作为参考使用测试计划可在GitHub repo

© www.soinside.com 2019 - 2024. All rights reserved.