谷歌存储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预期的字符串进行比较。