Как исправить ошибку аутентификации Azure BLOB-объектов. Не совпадает подпись заголовка авторизации / Mac. - PullRequest
0 голосов
/ 05 февраля 2019

Я использую BLOB-объекты Azure и загружаю изображения в виде BLOB-объектов в контейнер, вчера все работало, но по какой-то причине сегодня, когда я пытаюсь создать BLOB-объект (загружать изображение), я получаю сообщение об ошибке:

(node:5412) UnhandledPromiseRejectionWarning: Error: <?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:742c79aa-601e-0046-2f47-bd0f64000000
Time:2019-02-05T11:38:04.9687033Z</Message><AuthenticationErrorDetail>The MAC signature found in the HTTP request 'iEGyntz0xOL6HddnoD/F6GxkHjyZlxEGTQ21OjlWCy4=' is not the same as any computed signature. Server used following string to sign: 'PUT


67

application/xml; charset=utf-8

Я уже создал контейнер, и у него есть доступ к контейнеру и BLOB-объектам, как это было раньше.Я возвращаю containerURL и blobURL, как если бы этот двоичный объект был создан, я возвращаю URL контейнера:

https://facerstorage.blob.core.windows.net/suspects

, и я также получаю BlobURL:

"https://facerstorage.blob.core.windows.net/suspects/whoever.jpg"

но когда я проверяю лазурную панель внутри контейнера, блоба там нет.

Я также проверил свое время, я был на UTC + 2 и переключил его на UTC 0, который равен GMTЯ получаю с сервера, но он работал вчера и в GMT + 2.Не уверен, почему я получаю это, все работало раньше.

Спасибо

ОБНОВЛЕНИЕ 1:

Я поместил код, выполняющий загрузку, в блок try catch, и я получилошибка в этом формате:

 '<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\nRequestId:6b27b7c2-601e-0024-474c-bdcd43000000\nTime:2019-02-05T12:14:44.3155159Z</Message><AuthenticationErrorDetail>The MAC signature found in the HTTP request \'n/0RjbOhVCOHSkWlq4JWqPsgMe7UxkuyrA1HV1Y1AcY=\' is not the same as any computed signature. Server used following string to sign: \'PUT\n\n\n67\n\napplication/xml; charset=utf-8\n\n\n\n\n\n\nx-ms-client-request-id:ce83a49c-51fb-476e-b4ab-25968c162d82\nx-ms-date:Tue, 05 Feb 2019 12:14:43 GMT\nx-ms-version:2018-03-28\n/facerstorage/watchlist/CHRISTOPHER%20ROBERT%20METSOS.jpg\ncomp:blocklist\ntimeout:60000\'.</AuthenticationErrorDetail></Error>',
     headers: HttpHeaders { _headersMap: [Object] },
     status: 403 },
  body:
   { message:
      'Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\nRequestId:6b27b7c2-601e-0024-474c-bdcd43000000\nTime:2019-02-05T12:14:44.3155159Z' } }

Вот мой код, который выполняет загрузку. Я взял базу из Azure SDK и немного ее изменил:

async function uploadImage(aborter, containerURL, filePath, blobName) {
    try{ 
    filePath = path.resolve(filePath);

    const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, blobName);
    console.log("Blob created, URL is: " + JSON.stringify(blockBlobURL.url));

    const stream = fs.createReadStream(filePath, {
      highWaterMark: FOUR_MEGABYTES,
    });

    const uploadOptions = {
        bufferSize: FOUR_MEGABYTES,
        maxBuffers: 5,
    };


    //SAVE URL TO DB
    addToDB(blobName, blockBlobURL.url);



    return await uploadStreamToBlockBlob(
                    aborter, 
                    stream, 
                    blockBlobURL, 
                    uploadOptions.bufferSize, 
                    uploadOptions.maxBuffers);
  } catch (err) {console.log(err)}
}

UPDATE #2

-Проверены Azure Keys, обновлены и заменены.

-Возможно создавать контейнеры без каких-либо ошибок аутентификации.

-Пробовав использование обычного uploadLocalFile вместо потока, вы получите ошибку.

1 Ответ

0 голосов
/ 06 февраля 2019

Обнаружил ошибку, файлы, которые я загружал, имели пробелы между именем, например "Jhon Marcus"

Хотя я уже имел дело с этим, используя:

fileName = fileName.replace(/\s/gi, '-')

, заменяя пробелы передВпоследствии я добавил категорию в bloname, чтобы создать виртуальный каталог, и у категории были пробелы, поэтому это был / my cat / filename, и это был пробел в имени категории, который его сломал.

Но назакончить замену пробелов - исправил мою проблему.

Спасибо всем, кто помог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...