2011-01-31 169 views
0

我想通過我的flex應用程序訪問Azure上的Blob存儲。我通過使用Azure Blob Storage提供的URL通過HTTP服務執行此操作。但是,我的存儲具有專用和受限制的訪問權限,我只能使用密鑰(由Azure提供)來更新存儲。 由於我的應用程序需要寫入此存儲,我需要通過我的HTTPService傳遞密鑰? 有沒有人有任何想法我可以做到這一點?如何通過Flex應用程序訪問Azure blob存儲?

問候 阿帕娜

回答

0

所以第一步的對照是引用Azure存儲REST API,構建一個HTTP請求你希望遵循API規範用於您的操作。

一旦你有了,你將有一個標題(授權)你必須建立一個字符串。當你沒有預製圖書館時,這是一個棘手的部分。

最終目標是您將簡單地在您的HTTPService對象中設置並傳遞授權標頭。這將包含您的共享密鑰和簽名。此密鑰是一個長字符串,表示由Azure密鑰簽名的請求。我真的不知道Flex/AS語法,所以我會盡力簡單描述解決方案,並且可以實現。


該簽名是您用密鑰簽名的字符串。該字符串是下列元素的組合:

  • HTTP方法/動詞在請求
  • 的Content-MD5報頭值
  • 內容類型報頭值
  • 日期正在使用
  • 湛藍的特定所有的concatenized字符串(「X-MS-*」)頭中
  • Azure的帳戶名+團塊路徑的concatenzied字符串您正在訪問

所以,你要收集/創造這一切,CONCAT與他們的字符串,用你的密鑰創建一個字符串的簽名,通過在

要注意的是,因爲你發這一切是非常重要的在一個請求中,這些頭文件的值只是基於你傳入的內容。所以你不必爲此使用的可選字段(如Content-MD5)可以是空白的,你只需要傳遞它們即可。簽名僅僅基於您發送的內容,不存在雙因素檢查。

步驟1:收集數據,只是每一種存儲在一個變量,或隨時構建,打造屬於您的字符串簽署。

HTTP方法 - 只是無論你是想用天青做。如果閱讀,請使用GEt。如果創建,使用POST。如果修改,請使用PUT。等等...這只是匹配無論你已經在做

內容-MD5 - 如前所述,我們不必在這裏構建一個摘要,只需要使用(在C#「\ n」)一個換行符

的Content-Type - HTTPService對象具有此字段。設置它取決於你與API做什麼,然後簽署再次引用。

日期 - 再次,這是可選的,因爲Azure的請求傳遞日期自定義標題。只需再添加一個換行符。如果你想傳遞一個日期,那很好,只是確保你在這裏

引用相同的價值 - 這是一個有點特殊的語言,所以我就形容。您需要構建您的請求對象(基於Azure API),然後訪問請求的頭數組,遍歷每個請求對象,找到以「x-ms-」開頭的數據並構建它們的一長串。您還需要處理重複(不通過)和空白。

所以,如果我對我的要求5頭:

  • 的ContentType:文本/ XML
  • ETAG:10101010
  • X-MS-版本:2009-09-19
  • X- MS-元數據:SomeData

我的頭字符串將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一個:建立授權頭 一旦你的哈希,你把整個事情並構建Authorization頭。格式是

authString = "SharedKey" + [AzureAccountName] + [Signed String you just created] 

這個添加到請求,像

req.Headers.Add("Authorization", authString); 

如果你做了這一切正確,請求將正常工作。如果沒有,你會得到一個403一旦你得到它的權利,將其存儲在庫中,B/C相信我,你不想重建:)

好運

+0

大家好,您的答覆感謝。我試圖按照建議構建flex代碼。我面臨的問題是,我得到的HTTP代碼是200,這意味着我的請求已成功並交付,但是我的XML未在雲上更新。我安裝了Fiddler,看到我收到一條消息,說明沒有Proxy Authenticate標頭。隱私部分指出不存在P3P標頭。 – Aparna 2011-02-04 05:24:43

0

你需要傳遞您的密鑰在HTTP標頭中。您可以檢查出這種物質,它主要討論如何通過REST API跟Azure存儲,包括更新標頭值:http://msdn.microsoft.com/en-us/library/dd179428.aspx

如果有興趣的一些.NET代碼樣本中,對Microsoft.WindowsAzure.StorageClient使用反射以及Windows Azure SDK附帶的程序集,以瞭解它們是如何做到的。

0

我不知道Flex是否支持Java,但如果它再不是不寫自己的ActionScript封裝容器實施Azure的REST API可以使用的Windows Azure SDK的Java。關於這方面更多的信息可以在這裏找到:http://www.windowsazure4j.org/

相關問題