AWS REST API - SignatureDoesNotMatch我们计算的请求签名与您提供的签名不匹配

时间:2018-04-05 15:52:24

标签: rest amazon-web-services amazon-s3

我收到SignatureDoesNotMatch错误(我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法),同时发出“GET”请求,只有在使用V4签名使用Query参数进行GET请求时。 但是使用V2签名一切正常。 没有查询参数,我可以使用V4和V2签名进行GET(从S3下载文件),HEAD和PUT请求。

我使用了AWS的AmazonS3SigV4_Samples_CSharp示例。现在我尝试使用REST API列出来自存储桶的对象(将前缀作为空白,仅从根目录列出)

这是我的代码段

var endpointUri = "http://s3-us-west-2.amazonaws.com:80/mytestbucket/?delimiter=%2f&prefix";
var uri = new Uri(endpointUri);

// for a simple GET, we have no body so supply the precomputed 'empty' hash
var headers = new Dictionary<string, string>
{
{AWS4SignerBase.X_Amz_Content_SHA256, AWS4SignerBase.EMPTY_BODY_SHA256},
{"content-type", "text/plain"}
};

var signer = new AWS4SignerForAuthorizationHeader
{
EndpointUri = uri,
HttpMethod = "GET",
Service = "s3",
Region = "us-west-2"
};

var authorization = signer.ComputeSignature(headers, "?delimiter=%2f&prefix", AWS4SignerBase.EMPTY_BODY_SHA256, AWSAccessKey, AWSSecretKey);

// place the computed signature into a formatted 'Authorization' header
// and call S3
headers.Add("Authorization", authorization);

HttpHelpers.InvokeHttpRequest(uri, "GET", headers, null);

我怀疑在使用Query-parameter时我做错了,因为使用相同的程序我可以发出GET请求来下载文件(在ComputeSignature方法中传递空查询参数)。

有什么想法吗?

谢谢

0 个答案:

没有答案