2

すべてのヘッダーをまとめて、開発者向けの Google ストレージの既存のオブジェクトの ACL を変更する方法を理解するのに問題があります。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サンプルコードを持っている人はいますか?

ありがとう!

4

1 に答える 1

0

まず、 Google の API クライアント ライブラリでJSON APIを使用することをお勧めします。これにより、さまざまな言語での承認が容易になります。

次に、HMAC ではなくOAuth で認証することをお勧めします。リクエストに署名する方法を考える代わりに、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"

等...

署名するために間違ったメッセージを生成すると、Google は応答本文で署名するために予期される文字列を返します。したがって、署名する正しい文字列を生成していることを確認する最も簡単な方法は、自分の文字列を Google が期待する文字列と比較することです。

于 2013-05-21T21:51:35.313 に答える