示例:AWS 签名版本 4 中的签名计算
对于经过身份验证的请求,除非您使用 AWS SDK,否则您必须编写代码来计算在请求中提供身份验证信息的签名。AWS 签名版本 4 中的签名计算(请参阅对请求进行身份验证(AWS 签名版本 4))可能是一项复杂的任务,我们建议您尽可能使用 AWS SDK。
本节提供用 Java 和 C# 编写的签名计算示例。代码示例发送以下请求,并使用 HTTP Authorization 标头来提供身份验证信息:
-
PUT 对象:单独的示例说明了一次性上传完整有效载荷和分块上传有效载荷。有关使用 Authorization 标头进行身份验证的信息,请参阅对请求进行身份验证:使用 Authorization 标头(AWS 签名版本 4)。
-
GET 对象:此示例生成预签名 URL 以获取对象。查询参数提供签名和其它身份验证信息。用户可以在其浏览器中粘贴预签名 URL 以检索对象,也可以使用该 URL 创建可点击的链接。有关使用查询参数进行身份验证的信息,请参阅对请求进行身份验证:使用查询参数(AWS 签名版本 4)。
本节的其余部分介绍 Java 和 C# 中的示例。这些主题包括用于下载和执行示例的说明。
使用 Java 的签名计算示例(AWS 签名版本 4)
显示签名计算的 Java 示例可以从 https://docs.aws.amazon.com/AmazonS3/latest/API/samples/AWSS3SigV4JavaSamples.zip 下载。请注意,这些示例使用适用于 Java 的 AWS SDK v1,我们建议对新的应用程序使用适用于 Java 的 AWS SDK v2。在 RunAllSamples.java 中,main() 函数执行示例请求,以创建对象、检索对象以及为该对象创建预签名 URL。该示例根据代码中提供的文本字符串创建一个对象:
PutS3ObjectSample.putS3Object(bucketName, regionName, awsAccessKey, awsSecretKey); GetS3ObjectSample.getS3Object(bucketName, regionName, awsAccessKey, awsSecretKey); PresignedUrlSample.getPresignedUrlToS3Object(bucketName, regionName, awsAccessKey, awsSecretKey); PutS3ObjectChunkedSample.putS3ObjectChunked(bucketName, regionName, awsAccessKey, awsSecretKey);
在基于 Linux 的计算机上测试示例
以下说明适用于 Linux 操作系统。
-
在终端中,导航到包含
AWSS3SigV4JavaSamples.zip的目录。 -
将 .zip 文件解压缩。
-
在文本编辑器中,打开
./com/amazonaws/services/s3/samples/RunAllSamples.java文件。使用以下信息更新代码:可以在其中创建新对象的存储桶的名称。
注意
这些示例使用虚拟托管类型的请求来访问存储桶。为避免潜在的错误,请确保存储桶名称符合在《Amazon Simple Storage Service 用户指南》的存储桶限制和局限性中所述的存储桶命名规则。
存储桶所在的 AWS 区域。
如果存储桶位于美国东部(弗吉尼亚州北部)区域,请使用 us-east-1 指定区域。有关其它 AWS 区域的列表,请访问《AWS 一般参考》中的 Amazon Simple Storage Service(S3)。
-
编译源代码并将编译后的类存储到
bin/目录中。javac -d bin -source 6 -verbose com -
将目录更改为
bin/,然后运行RunAllSamples。java com.amazonaws.services.s3.sample.RunAllSamples该代码运行
main()中的所有方法。对于每个请求,输出都将显示规范请求、待签字符串和签名。
使用 C# 的签名计算示例(AWS 签名版本 4)
显示签名计算的 C# 示例可从 https://docs.aws.amazon.com/AmazonS3/latest/API/samples/AmazonS3SigV4_Samples_CSharp.zip 下载。请注意,这些示例使用适用于 .NET 的 AWS SDK v1,我们建议对新的应用程序使用适用于 .NET 的 AWS SDK v3。在 Program.cs 中,main() 函数执行示例请求,以创建对象、检索对象以及为该对象创建预签名 URL。用于签名计算的代码位于 \Signers 文件夹中。
PutS3ObjectSample.Run(awsRegion, bucketName, "MySampleFile.txt"); Console.WriteLine("\n\n************************************************"); PutS3ObjectChunkedSample.Run(awsRegion, bucketName, "MySampleFileChunked.txt"); Console.WriteLine("\n\n************************************************"); GetS3ObjectSample.Run(awsRegion, bucketName, "MySampleFile.txt"); Console.WriteLine("\n\n************************************************"); PresignedUrlSample.Run(awsRegion, bucketName, "MySampleFile.txt");
使用 Microsoft Visual Studio 2010 或更高版本测试示例
-
将 .zip 文件解压缩。
-
启动 Visual Studio,然后打开 .sln 文件。
-
使用有效的安全凭证更新 App.config 文件。
-
按如下所示更新代码:
-
在
Program.cs中,提供存储桶名称和存储桶所在的 AWS 区域。此示例在此存储桶中创建对象。
-
-
运行该代码。
-
要验证对象是否已创建,请复制程序创建的预签名 URL,然后将其粘贴到浏览器窗口中。