Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
《Windows Azure Platform 系列文章目錄》
?
如果讀者使用的是國內由世紀互聯運維的Azure China服務,請參考筆者的博文Azure China (4) 管理Azure China Storage Account
如果需要參考Azure China使用SAS Token的Sample Code,請參考筆者的博文:Azure China (10) 使用Azure China SAS Token
?
在之前一章的內容中,我們可以了解到:用戶可以把文件(比如照片、Word、Excel等)上傳到Windows Azure Storage Blob中,然后通過Http匿名訪問這個資源。
但是這樣會出現一個問題:我們沒有對這個資源進行訪問控制。
對于企業級應用來說,信息安全是非常重要的。如果一個企業應用部署到Windows Azure公有云上,文件資源都上傳到Azure Storage Blob中,企業外部人員都可以通過Http匿名訪問這些資源,顯然這個信息安全是遠遠不夠的。那么如何為Blob資源設置訪問權限,使得只有經過授權的人才能訪問它們呢?這個時候就需要使用Blob Service的功能:Shared Access Policy和Shared Access Signature。
Shared Access功能首先需要將Container設置為不允許匿名訪問的狀態,即通過URL無法訪問Blob信息。否則的話,Shard Access的功能就沒有任何意義了。Shared Access安全機制由一系列定義為Shared Access Policy對象構成。每個Shared Access Policy定義了一種安全訪問策略,它包括:
- Permissions:定義允許對Blob使用的功能。這些功能可以復合設置,即同時擁有一個或一個以上的功能,通過"或"操作來實現。具體的Permission選項包括:
- None:不允許任何操作
- Read:允許讀取操作
- Write:允許寫入操作
- Delete:允許刪除操作
- List:允許列舉Container下Blob的操作
- SharedAccessStartTime:Blob允許操作的開始時間,如果不設置這個屬性則為當前時間。
- SharedAccessExpiryTime:Blob可操作的過期時間。
這樣在對Blob或Container進行操作的時候,首先需要獲得一個Shared Access Signature。即通過剛才提到的Shared Access Policy創建一個Shared Access Signature,然后將這個Signature附加到訪問Blob的url后面,就能夠以安全的形式訪問這個Blob了。如果超過了Shared Access Policy設定的過期時間,或者執行的操作了允許的范圍,那么這個操作將會無法完成。
?
接下來,請下載我的實例,并且用Visual Studio 2010打開,開始本次的演示。
本次實例的主要功能是:創建不允許的匿名訪問的Blob Container,然后把本地的照片上傳到這個Container里。最后設置這個Container的訪問權限和過期時間。
核心代碼在Default.aspx.cs,分別是:
1.創建Container的時候,將Container訪問級別設置為不允許匿名訪問
private void EnsureContainerExists(){var container = GetContainer();// 檢查container是否被創建,如果沒有,創建container container.CreateIfNotExist();//設置Container不能被訪問container.SetPermissions(new BlobContainerPermissions(){PublicAccess = BlobContainerPublicAccessType.Off});}2.設置獲取的訪問權限以及過期時間,即對應的Shared Access Policy。由于這個Signature只是為了在后續網頁呈現的時候訪問Blob內容,因此可以設置以個比較短的過期時間。這樣做的好處是,及時而已用看到了這個URL和Signature的內容,超過了時間限制后也無法訪問這個Blob了,從而達到了保護照片以及防盜鏈的功能。設置過期時間為5秒鐘,只允許讀取權限。然后GetSharedAccessSignature方法將會返回一個字符串,即Shared Access Signature。
var sas = blob.GetSharedAccessSignature(new SharedAccessPolicy(){//設置權限為讀權限Permissions = SharedAccessPermissions.Read,
//設置過期時間為5秒鐘SharedAccessExpiryTime = DateTime.UtcNow.AddSeconds(5)});var secureURl = blob.Uri.AbsoluteUri + sas;LblUrl.Text = secureURl.ToString();
3.啟動項目
?
- 點擊"瀏覽",選擇本地機器上的照片文件
- 選擇中后,點擊 "Upload Image"
- 上傳完畢,會在頁面上顯示這個圖片訪問的url
4.快速選中這個url,在IE瀏覽器地址中輸入,可以查看到上傳成功的圖片
?
5.如果超過訪問時間(5秒)訪問這個圖片資源,您會得到下圖所示的錯誤信息。
?
注意:關于Blob Container的配置在CSCFG配置里面,你可以使用VS進行配置
?
分類:?Azure Storage本文轉自Lei Zhang的博客博客園博客,原文鏈接:http://www.cnblogs.com/threestone/archive/2012/01/20/2553501.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript中null与unde
- 下一篇: 智能家居实现物联