2013-12-19 59 views
0

我正在尋找使用Azure容器和Blob來存儲我的網站的圖像和視頻。我發現http://msdn.microsoft.com/en-us/library/windowsazure/dd179354.aspx談論不同的ALC設置,但它沒有回答我的問題之一。如果容器/ Blob設置爲「沒有公共讀取訪問權限」,該網站表示只有帳戶所有者才能讀取數據。這是否意味着人們無法通過URL訪問它,但是我在Azure虛擬機上託管的MVC Web應用程序能夠通過URL訪問它?Azure容器和Blob的ACL訪問能力

回答

2

請多多包涵,如果答案聽起來在Windows Azure中有點說教&不必要的冗長:)

基本上每個資源(BLOB容器,BLOB)具有獨特的URL,並可通過REST API(因此在訪問訪問http/https協議)。 Wit Wit,你基本上告訴存儲服務是否遵守發送給服務資源的請求。要了解關於認證機制的更多信息,您可能會發現這個鏈接很有用:http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx

當您將ACL設置爲No public read access時,您指示存儲服務不接受任何匿名請求。只有經過身份驗證的請求才會兌現。要創建已認證的請求,您需要使用您的帳戶名稱和密鑰,並創建一個授權頭,該頭隨請求一起傳遞,以訪問請求。如果您的請求中沒有此授權標頭,則該請求將被拒絕。

這麼長的故事總結,回答您的問題即使您的MVC應用程序將無法通過URL訪問blob,除非該請求中包含該授權標頭。一種可能性是探索blob存儲中的Shared Access Signature (SAS)功能。這會給存儲區中的斑點提供時間受限的權限。因此,您要做的是使用您的帳戶名稱和密鑰在您的MVC應用程序中爲您的blob創建一個SAS URL,並在該應用程序中使用該SAS URL。

爲了進一步說明ACL的概念,假設你有一個名爲mycontainer一個blob容器,它有一個名爲myaccount存儲帳戶名爲myblob.txt斑點。要在容器中列出Blob,容器URL將爲http://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list,並且Blob URL將爲http://myaccount.blob.core.windows.net/mycontainer/myblob.txt。以下將是行爲,當你試圖直接通過與不同的訪問控制列表的瀏覽器訪問以下網址:

無公共讀取權限

集裝箱網址 - 錯誤

斑點網址 - 錯誤

僅針對斑點的公共讀取訪問

容器URL - 錯誤

斑點網址 - 成功(將下載的blob)

全部公共讀取權限

集裝箱網址 - 成功(會顯示有關容器中的所有斑點含有XML文檔的信息)

Blob URL - 成功(將下載blob)