Я пытаюсь использовать "подписанные URL" для доступа/загрузки файлов в облачное хранилище Google (GCS).
Следуйте инструкциям в https://developers.google.com/storage/docs/accesscontrol#Signing-Strings
Что я сделал:
- Зарегистрировано "Веб-приложение" на Google Cloud Console.
- Сгенерированный новый закрытый ключ с использованием "Создать новый ключ" в разделе "Сертификат" на экране зарегистрированного веб-приложения.
- Создал мою строку, которая будет подписана и подпишут ее, используя пример кода, предоставленного в разделе "Как подписать" на странице (только незначительные изменения в значениях жесткого кода для основной программы Java). Обновление: Создал сущность для GcsSigner.java.
- Убедитесь, что подписанная строка закодирована в URL.
- HTTP-заголовки указаны: x-goog-api-версия, x-goog-project-id, Content-Type.
- Параметры URL, указанные: GoogleAccessId, подпись, срок действия.
- Используйте Postman (расширение Chrome) для имитации запроса PUT.
Однако я все еще получаю это (статус: 403 Запрещено):
<?xml version='1.0' encoding='UTF-8'?>
<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>PUT
text/plain
1384084959392
x-goog-api-version:2
x-goog-project-id:99999
/mybucket/myfile.txt</StringToSign>
</Error>
Даже когда я повторяю, подписывая строку на основе значений в "StringToSign", я все равно получаю ту же ошибку.
Прочитайте здесь различные связанные записи, но не смогли найти решение, и большинство из них относится к x-goog-api-version:1
, в то время как я использую версию 2.
Что мне не хватает? Любая помощь будет принята с благодарностью.