我正在尝试通过我的flex应用程序访问Azure上的Blob存储。我通过使用Azure Blob Storage提供的URL通过HTTP服务执行此操作。但是,我的存储具有私有和受限访问权限,我只能使用密钥(由Azure提供)更新存储。 由于我的应用程序需要写入此存储,我不知何故需要通过我的HTTPService传递密钥? 有谁知道我怎么能这样做?
此致 阿帕娜
答案 0 :(得分:0)
Azure存储使用仅由工具包装的REST Api。这是官方的模糊:
http://msdn.microsoft.com/en-us/library/dd179355.aspx
“获取Blob”的快速参考
答案 1 :(得分:0)
因此,第一步是引用 Azure存储REST API ,并根据API规范构建您要用于操作的HTTP请求。
完成后,您将拥有一个标题(授权),您必须为其构建一个字符串。当你没有预制的库时,这是一个棘手的部分。
最终目标是您只需在HTTPService对象中设置并传递Authorization标头。这将包含您的共享密钥以及签名。此密钥是一个长字符串,表示随后由Azure密钥签名的请求。我真的不知道Flex / AS语法,所以我会尽力简单地描述解决方案并且你可以实现。
该签名是您使用密钥签名的字符串。该字符串是以下元素的组合:
所以你要收集/创建所有这些,连接所有这些字符串,使用你的密钥创建该字符串的签名,在
中传递重要的是要注意,由于您在一个请求中发送了所有这些内容,因此这些标头的值只是基于您传入的内容。因此,您不会选择可选字段(如Content-MD5)必须使用这可能是空白的,你只需要传递它们。签名仅基于您发送的内容,没有双因素检查。
第1步:收集数据,只将每个数据存储在变量中,或者在构建要签名的字符串时动态构建。
HTTP方法 - 无论您尝试使用Azure做什么。如果阅读,请使用GEt。如果正在创建,请使用POST。如果修改,请使用PUT。等......这恰好与你正在做的事情相匹配
Content-MD5 - 如上所述,我们不必在这里构建摘要,只需使用换行符(C#中的“\ n”)
Content-Type - HTTPService对象具有此字段。根据您使用API执行的操作进行设置,然后再次参考签名。
日期 - 再次,这是可选的,因为Azure请求会传递日期的自定义标头。只需再次添加换行符即可。如果你想传递一个日期,那很好,只要确保你在这里引用相同的值
标题 - 这是一种特定的语言,所以我只是描述一下。您需要构建您的请求对象(基于Azure API)然后访问请求的标头数组,遍历每个,找到以“x-ms-”开头的那些并构建它们的长字符串。你还需要处理重复(不通过)和空白。
所以,如果我的请求中有5个标题:
我的标题字符串为Headers[x-ms-version]
+ Headers[x-ms-metadata]
或
“2009-09-19SomeData”
资源 - 这只是您正在访问的Azure Storage Account Name + the request Uri
。
第2步:构建要签名的字符串 所以你拥有所有这些,构造一个包含所有这些变量的字符串:
string strToSign = HttpMethoid + Content-MD5 +
Content-Type + Date + HeadersStr + ResourceStr
第3步:使用存储密钥对字符串进行签名
使用您的存储帐户密钥构造此字符串的HMAC-SHA256哈希。 您可能需要为Flex下载扩展库。我不认为它默认包含加密。只需谷歌HMAC-SHA256 Flex并使用其中一个
第4步:构建授权标头 获得该哈希后,您将完成所有操作并构建授权标头。格式为
authString = "SharedKey" + [AzureAccountName] + [Signed String you just created]
将此添加到请求中,例如
req.Headers.Add("Authorization", authString);
如果您已完成所有这些操作,则该请求将起作用。如果没有,你会得到403.一旦你做对了,把它存放在一个图书馆,b / c相信我你不想重建:)
祝你好运答案 2 :(得分:0)
您需要在HTTP标头中传递密钥。您可以查看此材料,其中介绍了如何通过REST API与Azure存储通信,包括更新标头值:http://msdn.microsoft.com/en-us/library/dd179428.aspx
如果对某些.NET代码示例感兴趣,请在Windows Azure SDK附带的Microsoft.WindowsAzure.StorageClient程序集上使用Reflector,以了解它们是如何进行的。
答案 3 :(得分:0)
我不确定Flex是否支持Java,但如果它支持Java,那么您可以使用Windows Azure SDK for Java而不是编写自己的ActionScript包装器来实现Azure REST API。有关这方面的更多信息,请访问:http://www.windowsazure4j.org/