用APEX调用AWS S3的签名格式是什么?举出例子
在APEX中调用AWS S3的签名格式是通过生成一个带有必要信息的字符串,并使用AWS的Access Key和Secret Key对其进行加密生成签名。以下是一个示例:
public class AWSS3SignatureGenerator {
public static String generateSignature(String httpMethod, String contentMd5, String contentType, String date, String canonicalizedAmzHeaders, String canonicalizedResource, String accessKey, String secretKey) {
String stringToSign = httpMethod + "\n" +
contentMd5 + "\n" +
contentType + "\n" +
date + "\n" +
canonicalizedAmzHeaders +
canonicalizedResource;
Blob signature = Crypto.signWithCertificate('RSA-SHA1', Blob.valueOf(stringToSign), 'aws-s3-private-key');
String encodedSignature = EncodingUtil.base64Encode(signature);
return 'AWS ' + accessKey + ':' + encodedSignature;
}
}
在上述示例中,httpMethod表示HTTP请求方法(如GET、PUT等),contentMd5表示请求正文的MD5哈希值,contentType表示请求正文的类型,date表示请求的日期和时间,canonicalizedAmzHeaders表示AWS S3特定的请求头(如x-amz-acl等),canonicalizedResource表示请求的资源路径。
要使用该签名生成器,可以按照以下步骤调用:
String accessKey = 'your-access-key';
String secretKey = 'your-secret-key';
String httpMethod = 'GET';
String contentMd5 = '';
String contentType = '';
String date = 'Sat, 18 Sep 2021 16:53:29 GMT';
String canonicalizedAmzHeaders = '';
String canonicalizedResource = '/bucket-name/object-key';
String signature = AWSS3SignatureGenerator.generateSignature(httpMethod, contentMd5, contentType, date, canonicalizedAmzHeaders, canonicalizedResource, accessKey, secretKey);
System.debug(signature);
这将生成一个AWS S3签名字符串,并将其打印在调试日志中。签名字符串的格式如下:
AWS your-access-key:generated-signature
请注意,示例中使用了Crypto.signWithCertificate方法来生成签名,该方法是基于Apex中的RSA-SHA1算法。确保在使用之前,你已经在Salesforce中设置了与AWS S3访问密钥匹配的证书
原文地址: http://www.cveoy.top/t/topic/h1mX 著作权归作者所有。请勿转载和采集!