【问题标题】:AWS node.js SDK error - SignatureDoesNotMatch: Signature expiredAWS node.js SDK 错误 - SignatureDoesNotMatch:签名已过期
【发布时间】:2014-12-31 10:24:26
【问题描述】:

Node.js 版本0.10.25

AWS 开发工具包版本latest - 2.0.23

我有一个应用程序持续监听队列 (SQS),如果该队列中有消息发布,应用程序将读取消息并处理它并将一些数据保存到 S3。当我在大约 20 分钟后启动应用程序时,我不断收到以下错误。

Potentially unhandled rejection [160] SignatureDoesNotMatch: Signature expired: 20141104T062952Z is now earlier than 20141104T062952Z (20141104T064452Z - 15 min.)
at Request.extractError (/myproject/node_modules/aws-sdk/lib/protocol/query.js:39:29)
at Request.callListeners (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:100:18)
at Request.emit (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/myproject/node_modules/aws-sdk/lib/request.js:604:14)
at Request.transition (/myproject/node_modules/aws-sdk/lib/request.js:21:12)
at AcceptorStateMachine.runTo (/myproject/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /myproject/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/myproject/node_modules/aws-sdk/lib/request.js:22:9)
at Request.<anonymous> (/myproject/node_modules/aws-sdk/lib/request.js:606:12)
at Request.callListeners (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:104:18)

这不是我的系统时间的问题。我的系统时间与我的 EC2 实例的时间同步。为什么我会收到此错误?是和SQS还是S3有关?

【问题讨论】:

  • 我最近在最新的 node.js sdk 中注意到一些奇怪之处,其中凭据链开始在我的环境之前查看实例配置文件角色提供了凭据并给了我类似的错误。你有没有试过降级你的包,说'2.0.10'左右,只是为了看看它是否是一个最近的错误?
  • @mattyice - 我没试过。这样做后会告诉你:)

标签: node.js amazon-web-services aws-sdk


【解决方案1】:

我知道这是一个老问题,但我今天亲身体验过。

幸运的是,AWS NodeJS SDK 现在有这个名为correctClockSkew 的配置选项,一旦发生错误,它将修复系统时钟偏移:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#correctClockSkew-property

【讨论】:

  • 这是正确答案。亚马逊应该考虑将默认设置为 true。现在在浏览器中使用 AWS Javascript SDK 比较普遍,而且浏览器时间不可靠。
【解决方案2】:

感谢 Loren Segal(亚马逊)的快速回复。有关详细信息,请参阅https://github.com/aws/aws-sdk-js/issues/401。简而言之,SDK 不会重试解决问题的签名错误

AWS.events.on('retry', function(resp) {
  if (resp.error.code === 'SignatureDoesNotMatch') {
    resp.error.retryable = true;
  }
});

这不是回归,即它不是2.0.23 中引入的错误

【讨论】:

    【解决方案3】:

    可能是你电脑上的时间不对

    签名不匹配是因为身份验证过程依赖于时钟同步。

    检查您机器上的时间。

    在 Linux / WSL 上,您可以运行 sudo hwclock -s 来修复。其他操作系统需要不同的命令。

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 2021-06-21
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      相关资源
      最近更新 更多