Я использую продукт под названием Alteryx, и я пытаюсь написать макрос Alteryx, который использует API запросов Dynamodb, чтобы я мог получить доступ к своим таблицам Dynamodb из Alteryx. К сожалению, мне не разрешено использовать один из Amazon SDK, поэтому мне приходится кодировать подпись API запросов Amazon вручную / в Alteryx.
Я использую пример Python Post, который включен в документацию Amazon, чтобы помочь мне в этом процессе. Пример Python можно найти здесь: Пример сообщения Python.
Я выполнил каждую из задач, изложенных в примере:
- Определить переменные запроса
- Создать канонический запрос
- Создайте строку для подписи
- Рассчитать подпись
- Добавьте информацию для подписи в запрос и сделайте запрос.
Первоначально я получал следующую ошибку:
InvalidSignatureException","message":"Signature·expired:·20150704T101118Z·is·now·earlier·than·20150704T135625Z·(20150704T141125Z·-·15·min.)
Хотя время на моем компьютере правильное и время: 101118Z, указанное в моем запросе, было действительно правильным, сообщение об ошибке сообщало мне, что срок действия подписи истек четыре часа назад. Моя работа для этой ошибки заключалась в том, чтобы добавить 4 часа к моей переменной (переменным) даты / времени, и это, похоже, помогло.
ВОПРОС 1. Кто-нибудь знаком с тем, что вызывает эту ошибку, и есть ли способ исправить ее, не добавляя 4 часа к моей переменной даты / времени. Может ли это вызвать дополнительные сложности в процессах подписи и запросов API подписи.
После применения обходного пути для даты / времени я получил новое сообщение об ошибке:
InvalidSignatureException","message":"The·request·signature·we·calculated·does·not·match·the·signature·you·provided.·Check·your·AWS·Secret·Access·Key·and·signing·method.·Consult·the·service·documentation·for·details.\n\nThe·Canonical·String·for·this·request·should·have·been\n'POST\n/\n\ncontent_type:\nhost:dynamodb.us-east-1.amazonaws.com\nx-amz-date:20150704T141834Z\nx-amz-target:DynamoDB_20120810.CreateTable\n\ncontent_type;host;x-amz-date;x-amz-target\n09a8bcdeea1d20631f887235820bbff0a614679080a2e74a89ceb1a1bcc71b44'\n\nThe·String-to-Sign·should·have·been\n'AWS4-HMAC-SHA256\n20150704T141834Z\n20150704/us-east-1/dynamodb/aws4_request\nec549e12e44faf7ee750e19b570eaf2389f82e722ae2978b535df6fd6f3df129'\n"}
Итак, затем я сравнил свой канонический запрос с тем, который указан в сообщении об ошибке. Вот что я нашел:
- Запрос был идентичен за одним исключением. Канонический запрос, представленный в сообщении об ошибке, имел заголовок content-type:, но исключал соответствующее значение типа содержимого.
- Мой канонический запрос включал как заголовок типа содержимого, так и значение.
- Хэш параметров запроса в конце канонического запроса идеально совпал со всем остальным.
Это важно, потому что канонический запрос - это вход для следующего шага процесса. Вы должны вычислить хэш-дайджест sha256 канонического запроса, чтобы создать строку для подписи. Я пробовал два альтернативных подхода / обходных пути для этой проблемы:
- Сначала я использовал полученный мной канонический запрос (включая значение типа содержимого), чтобы вычислить строку для подписи. В этом случае все соответствовало сообщениям об ошибках String To Sign, за исключением последнего элемента: хэша канонического запроса.
- Мой следующий подход заключался в вычислении канонического запроса, который исключал значение типа содержимого и, следовательно, точно соответствовал каноническому запросу, включенному в сообщение об ошибке. В этом сценарии производная строка для подписи полностью совпала, за исключением хэша канонического запроса.
ВОПРОС 2: сталкивался ли кто-нибудь с этой ошибкой; знаете ли вы причину и / или у вас есть обходной путь.
Я надеюсь, что как только я смогу ответить на вопрос 3, я смогу успешно выполнить 4-ю задачу, вычислить подпись и успешно сделать запрос api.
ВОПРОС 3. Знает ли кто-нибудь о других проблемах в этом процессе, есть ли у него какие-либо дополнительные предложения или идеи.
Z
в метке времени. Не по местному времени. Вы отправляете с запросом действительный и разумный заголовокContent-Type:
? - person Michael - sqlbot   schedule 05.07.2015