如何获取LIST桶内容的预签名URL?

时间:2015-05-05 04:21:05

标签: c# amazon-s3

这是我正在使用的示例项目。 特别是PresignedUrlSample类。

[http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-examples-using-sdks.html#sig-v4-examples-using-sdk-dotnet][1]

问题是,当传入表示我的存储桶中的文件但在传入时不起作用的对象键时,这是有效的:

“?/前缀= PREFIX&安培;最大密钥= 50”

错误是“我们计算的请求签名与您提供的签名不匹配。”

有文档说明这应该是可能的,但我在整个互联网上找不到一个示例,显示如何使用?prefix =参数语法实际创建预先签名的URL以列出存储桶的内容。

有趣的是,如果我只是传入一个正斜杠的密钥,我可以列出整个存储桶,但显然这根本不是解决方案。前缀参数是使其可行的原因,但也会导致Amazon Signature 4 C#示例项目出现问题。

这是我发现的文档,它明确声明您可以创建预签名URL以全部或部分列出存储桶。所以问题是为什么它不能计算出正确的签名?

GET /?prefix=photos&max-keys=50&marker=puppy HTTP/1.1
User-Agent: Mozilla/5.0
Host: johnsmith.s3.amazonaws.com
Date: Tue, 27 Mar 2007 19:42:41 +0000

Authorization: AWS AKIAIOSFODNN7EXAMPLE:
htDYFYduRNen8P9ZfE/s9SuKy0U=

请注意,我必须修改示例,因为开发人员硬编码网址使用“?”对于第一个“amz-”参数但是因为?prefix =已经使用问号来参数化URL我必须将Amazon查询身份验证参数更改为所有使用的&符号。

感谢任何想要深入研究教授问题的人!

更新:这是我的解决方案。 //这是来自示例项目PresignedUrlSample.cs类

首先在上面的类中的Run()静态方法中添加2个新参数。一个是前缀值,另一个是max-keys值。

queryParams.AppendFormat("{0}={1}", AWS4SignerBase.X_Amz_Expires, HttpHelpers.UrlEncode(period.ToString()));

//在此行下方添加以下2行代码。

//我将这两行代码添加到链接到此帖子顶部的示例项目中。只需传递MyPrefix和MaxKeys值,就可以了。

   queryParams.AppendFormat("{0}={1}", "&prefix", MyPrefix);
    queryParams.AppendFormat("{0}={1}", "&max-keys", MaxKeys);

我希望这可以帮助别人,因为它让我疯了一整天,一旦我通过调试代码来理解问题,解决方案就非常简单了。甚至没有必要阅读密集的Amazon Signature 4文档,除非那是你的包。 :d

0 个答案:

没有答案