在 Node.js 中对来自 AWS S3 getSignedUrl 的 URL 执行获取请求时出现 Signature



我试图访问我使用AWS的getSignedUrl方法放置的数据。S3 接口 http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property .当我使用该方法返回的 url 时,出现错误。

用于将数据放入 S3 存储桶的代码

    var params = {
      Bucket: BUCKET_NAME,
      Key: 'testing132',
      Body: 'tasdfasfasdfs',
      Expires: EXPIRATION_TIME,
      ACL: 'public-read'
    };
    $log.info('test s3 dep', this);
    s3.getSignedUrl('putObject', params, function (err, url) {
      if (err) return cb(err);
      return cb(null, url);
    });

在返回的URL上执行来自POSTMAN的GET请求时,我收到以下页面,其中删除了一些信息以确保安全

<?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>ASIAJ.....</AWSAccessKeyId>
    <StringToSign>GET

1467833494
x-amz-acl:public-read
x-amz-security-token:FQoDYXdzEKz//////////wEaDBW+iL+gqGBqn2qxcyKcA1etzJzOZV33H3ND2hxQcm5MsJuZiHuEz5EvODXvDD7IfnlsbgNmLs70WAJ.................=
/s3test_test/testing132</StringToSign>
    <SignatureProvided>sNNramN6fDo+sf......=</SignatureProvided>
    <StringToSignBytes>47 45 54 0a 0a 0a 31 34 36 37 38 33 33 34 39 34 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 78 2d 61 6d 7a 2d 73 65 63 75 72 69 74 ..............</StringToSignBytes>
    <RequestId>2404FC0B........</RequestId>
    <HostId>u5CapGu...............=</HostId>
</Error>

所以有一些混乱,我没有足够仔细地阅读文档。我假设getSignedUrl该方法中的"putObject"参数意味着我将对象上传到指定的键,然后检索该对象的 url。这个假设是错误的,基本上putObject参数意味着你指定用户正在 PUT 的对象的特征到生成的 url。使用getObject解决了问题。从文档You can use this functionality [putObject] to generate pre-signed PUT operations that require a specific payload to be uploaded by the consumer of the URL.

最新更新