AWS node.js SDK грешка - SignatureDoesNotMatch: Подписът е изтекъл

Node.js версия 0.10.25

Версия на AWS SDK 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?


person Srivathsa    schedule 04.11.2014    source източник
comment
наскоро забелязах някаква странност в най-новия node.js sdk, където веригата на идентификационните данни, започвайки да разглежда ролята на профила на екземпляра преди моята среда, предостави идентификационни данни и ми дава подобни грешки. Опитахте ли да понижите пакета си, за да кажете "2.0.10" или така, само за да видите дали е скорошен бъг?   -  person mattr    schedule 04.11.2014
comment
@mattyice - това не съм го пробвал. Ще ви уведомим, след като го направите :)   -  person Srivathsa    schedule 04.11.2014


Отговори (3)


Знам, че това е стар въпрос, но днес го изпитах лично.

За щастие и AWS NodeJS SDK вече има тази опция за конфигурация, наречена correctClockSkew, която ще коригира отместването на системния часовник, след като възникне грешка:

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

person Churro    schedule 25.09.2015
comment
Това е правилният отговор. Amazon трябва да обмисли настройката по подразбиране на true. Използването на AWS Javascript SDK в браузъра е по-често срещано в наши дни и времето на браузъра е ненадеждно. - person Gary Weiss; 16.03.2016

Благодаря на Лорен Сегал (Amazon) за бързия му отговор. Вижте 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

person Srivathsa    schedule 05.11.2014

Вероятно часът на вашия компютър е неправилен

Несъответствието на подписа е, защото процесът на удостоверяване зависи от синхронизацията на часовника.

Проверете часа на вашата машина.

На Linux / WSL можете да стартирате sudo hwclock -s, за да коригирате. Други операционни системи ще изискват различни команди.

person mikemaccana    schedule 10.06.2021