изменение acl хранилища Google для существующего объекта - PullRequest
2 голосов
/ 11 апреля 2011

У меня проблемы с пониманием того, как собрать все заголовки вместе, чтобы изменить acl для объекта exixting в хранилище Google для разработчиков. Мне нужно сделать это вручную без boto или других вспомогательных библиотек.

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

это в основном пример, который я нашел на руководстве разработчика

PUT /paris.jpg?acl HTTP/1.1
Host: travel-maps.commondatastorage.googleapis.com
Date: Mon, 15 Feb  2008 21:30:39 GMT
Content-Length: 0
Authorization: GOOG1 GOOGTS7C7FUP3AIRVJTE:Y9gBLAEInIlFv5zlAm9ts=
x-goog-acl: private

<empty entity body>

что мне не понятно и где я застрял, это как я создаю подпись. подпись состоит из:

Signature = Base64-Encoding-Of(HMAC-SHA1(UTF-8-Encoding-Of(YourGoogleStorageSecretKey, MessageToBeSigned)))

Я не знаю, какие части заголовков я должен включать, исключать переводы строк .... для составления MessageToBeSigned. у кого-нибудь есть пример кода Python, где он делает что-то подобное?

спасибо!

1 Ответ

0 голосов
/ 22 мая 2013

Во-первых, я рекомендую использовать API JSON с клиентскими библиотеками API Google, которые упрощают авторизацию на разных языках.

Во-вторых, я рекомендую аутентификацию с OAuth вместо HMAC. Это намного проще, потому что вы можете просто отправить свой токен доступа через HTTPS вместо того, чтобы выяснить, как подписать запрос. Каждый запрос аутентифицируется чем-то вроде:

Authorization: OAuth Bearer 1/2093840249809382402890948

Как говорится, посмотрите здесь: https://developers.google.com/storage/docs/reference/v1/developer-guidev1#authentication

MessageToBeSigned определяется как кодировка UTF8 канонических заголовков, заголовков расширений и ресурса:

MessageToBeSigned = UTF-8-Encoding-Of(
    CanonicalHeaders +
    CanonicalExtensionHeaders +
    CanonicalResource)

Заголовки:

CanonicalHeaders = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n"

Etc ...

Если вы сгенерируете неправильное сообщение для подписи, Google вернет ожидаемую строку для подписи в теле ответа. Поэтому самый простой способ убедиться, что вы генерируете правильную строку для подписи, - это сравнить вашу строку со строкой, которую ожидает Google.

...