View a markdown version of this page

示例:AWS 签名版本 4 中的签名计算 - Amazon Simple Storage Service

示例:AWS 签名版本 4 中的签名计算

对于经过身份验证的请求,除非您使用 AWS SDK,否则您必须编写代码来计算在请求中提供身份验证信息的签名。AWS 签名版本 4 中的签名计算(请参阅对请求进行身份验证(AWS 签名版本 4))可能是一项复杂的任务,我们建议您尽可能使用 AWS SDK。

本节提供用 Java 和 C# 编写的签名计算示例。代码示例发送以下请求,并使用 HTTP Authorization 标头来提供身份验证信息:

本节的其余部分介绍 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 操作系统。

  1. 在终端中,导航到包含 AWSS3SigV4JavaSamples.zip 的目录。

  2. 将 .zip 文件解压缩。

  3. 在文本编辑器中,打开 ./com/amazonaws/services/s3/samples/RunAllSamples.java文件。使用以下信息更新代码:

    • 可以在其中创建新对象的存储桶的名称。

      注意

      这些示例使用虚拟托管类型的请求来访问存储桶。为避免潜在的错误,请确保存储桶名称符合在《Amazon Simple Storage Service 用户指南》存储桶限制和局限性中所述的存储桶命名规则。

    • 存储桶所在的 AWS 区域。

      如果存储桶位于美国东部(弗吉尼亚州北部)区域,请使用 us-east-1 指定区域。有关其它 AWS 区域的列表,请访问《AWS 一般参考》中的 Amazon Simple Storage Service(S3)

  4. 编译源代码并将编译后的类存储到 bin/ 目录中。

    javac -d bin -source 6 -verbose com
  5. 将目录更改为 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 或更高版本测试示例
  1. 将 .zip 文件解压缩。

  2. 启动 Visual Studio,然后打开 .sln 文件。

  3. 使用有效的安全凭证更新 App.config 文件。

  4. 按如下所示更新代码:

    • Program.cs 中,提供存储桶名称和存储桶所在的 AWS 区域。此示例在此存储桶中创建对象。

  5. 运行该代码。

  6. 要验证对象是否已创建,请复制程序创建的预签名 URL,然后将其粘贴到浏览器窗口中。