Windows Azure - 设置Blob服务属性REST API调用身份验证参数

时间:2012-06-19 20:09:59

标签: azure azure-storage azure-storage-blobs

我正在尝试对Set Blob Properties API(http://msdn.microsoft.com/en-us/library/windowsazure/hh452235)进行简单的REST调用,以便关闭/打开日志记录。我已经获得REST API调用以成功检索Blob属性,因此我知道我的哈希算法,标头设置和身份验证签名创建工作,但我似乎无法让它在Set Properties方面工作。我一直在认证标题上出错,所以我知道我没有在那里做一些事情。

我已经在下面复制了正在创建的内容并最终散列并放入auth标头字符串中。在线文档(http://msdn.microsoft.com/en-us/library/windowsazure/dd179428)并没有真正帮助确定这种特定类型的Blob请求绝对需要哪些字段,所以我试过了填写大部分内容,但无论我填写什么,我似乎都没有得到不同的响应。我也尝试过Shared Key Lite身份验证,因为它更轻便,但不是当我填写所有这5个字段时,它似乎都有效。

Blob服务的共享密钥身份验证:

PUT\n \n \n 130\n (MD5_CONTENT_HASH) \n \n \n \n \n \n \n x-ms-date:Tue, 19 Jun 2012 19:53:58 GMT\n x-ms-version:2009-09-19\n /(MY_ACCOUNT)/\n comp:properties\n restype:service

我有什么明显的遗失吗?当我发出请求调用时,值(MD5_CONTENT_HASH)和(MY_ACCOUNT)当然填入,并且当我发送它时,类似的请求调用“GET”属性工作正常。这个和这之间的唯一区别是我发送MD5_content以及内容长度。不过,我可能会遗漏一些明显的东西。

任何建议都将不胜感激!提前致谢。 -Vincent

编辑更多信息:

我正在使用的编程语言:Objective-C(iOS iPhone)

我也在使用ASIHTTPRequest来发出请求。我只是定义了请求,setRequestMethod:@“PUT”,然后我创建了请求体并将其转换为NSData来计算长度。我通过appendPostData方法将请求主体数据附加到请求。然后我构建上面的auth字符串,哈希整个事情,并将其作为名为“授权”的标题附加到请求。

请求正文字符串我正在使用:

<?xml version=\"1.0\" encoding=\"utf-8\"?><StorageServiceProperties><Logging><Version>1</Version></Logging></StorageServiceProperties>

<?xml version=\"1.0\" encoding=\"utf-8\"?><StorageServiceProperties><Logging><Version>1</Version></Logging></StorageServiceProperties> 我知道这是一个不完整的请求主体,但我正计划等待它在“缺少请求主体元素”或类似的东西上失败,直到我继续在那里创建完整的XML。 (这可能是我的问题吗?)

我从服务器获取错误:

<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:accc4fac-2701-409c-b1a7-b3a528ce7e8a
Time:2012-06-20T14:36:50.5313236Z</Message><AuthenticationErrorDetail>The MAC signature found in the HTTP request '(MY_HASH)' is not the same as any computed signature. Server used following string to sign: 'POST


130








x-ms-date:Wed, 20 Jun 2012 14:36:50 GMT
x-ms-version:2009-09-19
/(MY_ACCOUNT)/
comp:properties
restype:service'.</AuthenticationErrorDetail></Error>

奇怪的是,无论我将多少参数传递到身份验证签名中,我从服务器返回的错误看起来都是这样。

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

比较已签名的字符串和错误消息表示您正在发送POST请求,但签名就好像您正在发送PUT一样。