通过HTTP标头在Amazon S3 for .NET SDK中签名请求

时间:2012-05-16 00:13:23

标签: amazon-s3

我正在尝试从ASP.NET应用程序访问Amazon S3内容。我正在使用适用于.NET的AWS SDK工具包。目前,我使用GetpreSignedURL()函数来签署我的请求,然后我将我的IFrame src设置为URL。

s3Placeholder.Text = ListingObjects();

GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
    .WithBucketName(bucketName)
    .WithKey("notebook.htm");

request.WithExpires(DateTime.Now.Add(new TimeSpan(7, 0, 0, 0)));

string url = S3.GetPreSignedURL(request);    
this.Iframe2.Attributes.Add("src", url);

问题是,如果你看一下IFrame的来源,你可以看到完整的字符串,包括访问密钥和签名。我想知道是否有更好的方法通过HTTP标头执行此操作,以便登录安全信息不会通过查询字符串传递。

1 个答案:

答案 0 :(得分:2)

您无法使用http标头对请求进行身份验证,因此唯一可能的选择是通过您的Web服务器代理任何请求,但这会变得复杂并消除S3的许多好处。

但是,你所做的并不是不安全的。预签名网址不会公开您的密钥。它只显示您的密钥(不需要保密)和使用密钥生成的签名(哈希)。

您无法从网址返回来获取密钥。

您可以使用Amazons IAM创建一个只具有对单个存储桶的只读访问权限并使用这些凭据创建网址的用户,从而使事情变得更加安全。这样,即使攻击者以某种方式设法从网址对您的密钥进行逆向工程,他们只能只读取一个存储桶。