javascript - AWS关于时差的错误

标签 javascript node.js amazon-web-services

我正在使用异步调用来调用 aws,并且收到了此消息。 <![CDATA["Signature expired: 20171114T190104Z is now earlier than 20180323T213705Z (20180323T214205Z - 5 min.)"]]> .

我知道这很可能是由于我的机器时钟关闭造成的,但是我该如何修复它呢?时间设置为自动确定,就像这样。 enter image description here

我使用的是 Fedora。

This答案表明AWS key 可能超时(?)(我不完全理解这一点)。如果是这种情况我该如何解决这个问题?我尝试按照错误提示手动更改时钟 -5 分钟和 +5 分钟,但没有执行任何操作。

编辑:使用实时 Heroku 服务器时会出现相同的错误。

Edit2:我正在使用 Node Express 并进行如下调用:

function(callback) {
  // third call
  var results = '';
  var options = {
    host: urlObject.host,
    protocol: urlObject.protocol,
    path: urlObject.path,
    headers: {
      Authorization: `AWS4-HMAC-SHA256 Credential=key/20171114/us-west-1/awis/aws4_request, SignedHeaders=host;x-amz-date, Signature=key`,
      'Content-Type': 'application/xml',
      'X-Amz-Date': '20171114T190104Z',
      Accept: 'application/xml',
    },
  };
  https.get(options, resource => {
    resource.setEncoding('utf8');
    resource.on('data', function(data) {
      // results += JSON.parse(data);
      results += data;
    });
    resource.on('end', function() {
      callback(null, results);
    });
    resource.on('error', function(err) {
      callback(err);
    });
  });
},

最佳答案

您需要使用 X-Amz-Date header 提供当前日期,而不是示例代码中的日期。这个blog post有一个示例说明如何在 Node.js 中执行此操作以遵循 AWS API 期望的格式:

// get the various date formats needed to form our request
var amzDate = getAmzDate(new Date().toISOString());

// this function converts the generic JS ISO8601 date format to the specific format the AWS API wants
function getAmzDate(dateStr) {
  var chars = [":","-"];
  for (var i=0;i<chars.length;i++) {
    while (dateStr.indexOf(chars[i]) != -1) {
      dateStr = dateStr.replace(chars[i],"");
    }
  }
  dateStr = dateStr.split(".")[0] + "Z";
  return dateStr;
}

然后,当然,您需要将该 amzDate 变量分配给请求中的 X-Amz-Date header 。

长期来看,我想你会发现使用官方的Node.js AWS SDK更有用。而不是尝试将这些查询定制为 AWS 期望的格式,因此您可能想探索一下!

关于javascript - AWS关于时差的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49458720/

相关文章:

node.js - 为什么最新的 Angular CLI 有损坏的包?

javascript - 如何包含适当的 JavaScript 文件版本(缩小版与原始版)?

amazon-web-services - 如何通过 AWS BeanStalk 将非 Web Java 应用程序部署到 EC2?

amazon-web-services - Amazon SNS -- 更改发件人 ID

javascript - 这么多括号。我真的无法理解所有这些括号

javascript - 使用 anchor 标记的 div 上的 Jquery Scroll 无法正常工作

javascript - 为什么 Google Maps API 无法从 HTML 文件中的 JS 访问自定义 CSS 文件?

javascript - 为什么绝对定位的指示符会从相对定位的容器中消失?

node.js - 使用ES6模板字符串查询sql数据库

amazon-web-services - AWS 启动模板 : A value of 4 for CoreCount is not a valid value for the r5a. xlarge 实例类型。有效值为 [2]