Исправление ошибки "SignatureDoesNotMatch" при использовании Amazon Storage Service в Delphi XE2
Вопрос, поднятый пользователем, заключается в возникновении ошибки SignatureDoesNotMatch при попытке загрузки объектов в Amazon Storage Service с использованием Delphi XE2. Ошибка проявляется только при установке типа содержимого Content-type в форматы, связанные с текстовыми данными, например, text/plain или text/html. При изменении типа содержимого на другие значения, например, video/3gpp, проблема исчезает, и загрузка проходит успешно.
Подтвержденный ответ:
Пользователь обнаружил, что проблема решается путем добавления параметра charset=ISO-8859-1 к строке Content-type. Изменение выглядит следующим образом:
При детальном анализе кода было выявлено, что класс TIdEntityHeaderInfo (расположенный в файле IdHTTPHeaderInfo.pas) модифицирует строку Content-type, добавляя к ней параметр кодировки, если это текстовый тип данных и параметр кодировки отсутствует. Это приводит к несоответствию подписи, так как изменение строки после процесса подписи делает подпись недействительной.
Пример кода:
var
ConInfo: TAmazonConnectionInfo;
RespInfo: TCloudResponseInfo;
Service: TAmazonStorageService;
Content: TBytes;
Headers: TStringList;
begin
ConInfo:=TAmazonConnectionInfo.Create(nil);
ConInfo.AccountName:='YOUR ACCOUNT NAME';
ConInfo.AccountKey:='YOUR ACCOUNT KEY';
ConInfo.Protocol:='http';
Service:=TAmazonStorageService.Create(ConInfo);
RespInfo:=TCloudResponseInfo.Create;
SetLength(Content, 128);
FillMemory(@Content[0], 128, Byte('x'));
Headers:=TStringList.Create;
// Установка Content-type с параметром кодировки
Headers.Values['Content-type']:='text/plain; charset=ISO-8859-1';
if not Service.UploadObject('YOUR BUCKET', 'test.txt', Content, TRUE, nil, Headers, amzbaPrivate, RespInfo) then
ShowMessage('Failed:' + RespInfo.StatusMessage);
end;
Комментарии:
Пользователи, столкнувшиеся с подобной проблемой, должны обратить внимание на корректность указания параметра кодировки в строке Content-type. Также стоит отметить, что имена бакетов в Amazon Storage Service должны быть в нижнем регистре, что может быть дополнительной причиной возникновения ошибки 403 Forbidden.
Эта статья предназначена для разработчиков, использующих технологии Delphi и Object Pascal, и может быть полезна при решении проблем, связанных с интеграцией Amazon Storage Service в свои проекты.
Пользователь столкнулся с ошибкой `SignatureDoesNotMatch` при использовании Amazon Storage Service в Delphi XE2, связанной с установкой определенного типа содержимого `Content-type`.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.