尝试在签名v4中上传大文件(块上传)时,我从AWS收到以下错误: SignatureDoesNotMatch我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
FineUploader标题: { “报头”:“AWS4-HMAC-SHA256 \ n20180214T003940Z \ n20180214 / EU-西-3 / S3 / aws4_request \ nPOST \ N /文件夹名/ oovoosdk-android-2.3.0.113-1.zip \ nuploads = \ n主机:{ {3}} \ NX-AMZ-ACL:私人\ NX-AMZ-内容SHA256:e3b0c44298fc1c149c897ydu27sas88e56e4649b934ca495991b7852b855 \ NX-AMZ-日期:20180214T003940Z \ NX-AMZ-元文件名:oovoosdk-android-2.3.0.113-1.zip \ NX-AMZ-元qqfilename:oovoosdk-android-2.3.0.113-1.zip \ n \ n主机; X-AMZ-ACL; X-AMZ-内容-SHA256; X-AMZ-日期; X-AMZ-元-filename; X-AMZ-元qqfilename \ ne3b0c44298fc1c149afbf4c8b92427ae41e464hd783a3dc752b855" }
CanonicalRequest
POST /foldername/oovoosdk-android-2.3.0.113-1.zip 上传= 主持人:test.s3.amazonaws.com X-AMZ-ACL:私人 X-AMZ-内容SHA256:e3b0c44298fc1c149c897ydu27sas88e56e4649b934ca495991b7852b855 X-AMZ-日期:20180214T010103Z X-AMZ-元文件名:oovoosdk-android-2.3.0.113-1.zip 的x AMZ-元qqfilename:oovoosdk-android-2.3.0.113-1.zip
主机; X-AMZ-ACL; X-AMZ-内容-SHA256; X-AMZ-日期; X-AMZ-元文件名X-AMZ - 间 - qqfilename e3b0c44298fc1c149afbf4c8b92427ae41e464hd783a3dc752b855
非chunk上传在签名v4中正常工作。
v4签名生成代码
StringtoSign - >精细上传者的标题
public static String getSignature(AWS_Key_Set__c awsKeySet,String StringtoSign)
{ String HASH_ALGORITHM = 'SHA-256';
String MAC_ALGORITHM = 'HmacSHA256';
String SIGNATURE_VERSION = 'AWS4';
String SIGNATURE_ALGORITHM = 'AWS4-HMAC-SHA256';
String serviceName='s3';
Datetime dt = Datetime.now();
String region='eu-west-3';
String todayDate = dt.formatGmt('yyyyMMdd');
String now = todayDate + 'T' + dt.formatGmt('HHmmss') + 'Z';
Blob keyDate = Crypto.generateMac(MAC_ALGORITHM, Blob.valueOf(todayDate), Blob.valueof(SIGNATURE_VERSION + awsKeySet.AWS_Secret_Key__c));
Blob keyRegion = Crypto.generateMac(MAC_ALGORITHM, Blob.valueOf(region), keyDate);
Blob keyService = Crypto.generateMac(MAC_ALGORITHM, Blob.valueOf(serviceName.toLowerCase()), keyRegion); Blob keyCredentials = Crypto.generateMac(MAC_ALGORITHM, Blob.valueOf('aws4_request'), keyService);
return EncodingUtil.convertToHex(Crypto.generateMac(MAC_ALGORITHM, Blob.valueOf(StringtoSign), keyCredentials));
}