谷歌存储acl在现有对象上的变化

问题描述:

即时通讯问题了解如何将所有的标题放在一起,以改变acl在谷歌存储上exixting对象为开发人员。我需要手动执行此操作,而不使用boto或其他帮助程序库。谷歌存储acl在现有对象上的变化

我需要做的是基本上设置一个对象从公共私有和其他方式。

这基本上是我在the developers guide

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> 

发现的例子是什么我也不清楚,并在那里停留的IM是如何建立的签名。 所述签名是由组成:

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

我不知道哪些报头部分我应该包括,排除,换行符....以构成MessageToBeSigned。 有没有人有一个python示例代码,他在做类似的事情?

谢谢!

首先,我建议使用the JSON api与谷歌的API客户端库,这使得在各种语言的授权更容易。

其次,我建议authenticating with 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" 

等...

如果您生成错误的消息来签署,Google会返回预期的字符串以签署响应正文。因此,验证您最简单的方法是生成要签名的正确字符串,以便将您的字符串与Google预期的字符串进行比较。