Amazon web services 签名S3 URL失败(我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法)

Amazon web services 签名S3 URL失败(我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法),amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我正在尝试生成签名URL以上载和下载S3存储桶中的对象,但由于SignatureDesNotMatch失败,如下所示 <?xml version="1.0" encoding="UTF-8"?> <Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you pro

我正在尝试生成签名URL以上载和下载S3存储桶中的对象,但由于SignatureDesNotMatch失败,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKIAJ66RWEJPYWX6PL2A</AWSAccessKeyId><StringToSign>GET
我知道这是此处描述的问题的症状

也就是说,我的证件有点不对劲。我仔细检查了我的.aws/credentials文件并生成了新文件。此外,我可以使用这些凭证执行其他AWS操作,例如查询dynamoDb或列出我的bucket

我用来生成URL的代码,我从这里复制:


是的,我的桶是存在的。我怎样才能弄清楚这个问题呢?

我发现了问题所在,当时我正在使用chrome插件高级REST客户端发送请求,我想一些CORS规则会使该应用程序的JavaScript请求失败。从浏览器的地址字段中执行请求。你能发布整个事情吗?做一些简单的测试,如果它真的是一个凭证错误,例如做一个简单的桶列表。
final ZonedDateTime expiration = ZonedDateTime.now().plusSeconds(expirationSeconds);

final GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(
    bucketName, objectId.toString());
generatePresignedUrlRequest.setMethod(isUpload ? HttpMethod.PUT : HttpMethod.GET);
generatePresignedUrlRequest.setExpiration(Date.from(expiration.toInstant()));

return amazonS3Client.generatePresignedUrl(generatePresignedUrlRequest).toURI();