Подписанные URL-адреса в облачном хранилище Firebase внезапно становятся недоступными - PullRequest
0 голосов
/ 02 мая 2018

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

Я использую облачные функции для изменения размера изображений для различных разрешений экрана и загрузки их обратно в GCS.

Чтобы сделать эти изображения общедоступными, я создаю подписанный URL-адрес, который сохраняется в связанном объекте в базе данных реального времени.

const [signedUrl] = await bucket.file(path).getSignedUrl({
  action: "read",
  expires: "01-01-2500",
})

До сегодняшнего дня URL-адреса, сгенерированные в соответствии с приведенным выше кодом, позволяли любому просматривать изображения. Затем внезапно все ранее сгенерированные URL-адреса стали недоступными и вместо них отображается следующая ошибка:

<Error>
 <Code>SignatureDoesNotMatch</Code>
 <Message>
   The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
 </Message>
 <StringToSign>
   GET 16725225600 /project-name.appspot.com/placeImage%2F300w%2FUPfppRM1ZyjbwBNiakgzyQ%3D%3D.jpg
 </StringToSign>
</Error>

Я вижу вышеупомянутое сообщение для всех ранее загруженных изображений. Недавно загруженные изображения можно просматривать просто отлично.

Мой код имитирует этот пример , предоставленный функциями-примерами, однако я беспокоюсь о том, чтобы перенести это в производство, если проблема станет повторяющейся.

Что может быть источником этой проблемы, и есть ли способ защитить себя от нее в будущем?

1 Ответ

0 голосов
/ 15 ноября 2018

Кажется, эта проблема связана с использованием URL v4.

Поведение, которое вы испытываете, объяснено в этом комментарии владельцем IAM в Google Cloud Функции:

Недавно GCS уже начал поддерживать URL-адреса v4. Например, [gsutil] генерирует URL версии 4 по умолчанию. Максимальный срок действия этих URL - 7 дней.

...