2

我在理解如何将所有标头放在一起以更改开发人员在谷歌存储上的现有对象上的 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

首先,我建议将 JSON api与 Google 的 api 客户端库一起使用,这使得在各种语言中的授权更容易。

其次,我建议使用 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 期望的字符串进行比较。

于 2013-05-21T21:51:35.313 回答