2016-10-02 143 views
0

我有一個使用Azure Blob存儲來存儲文檔和圖像的Web應用程序(ASP.NET MVC)。每個用戶都有對blob的特定訪問權限,並且此 存儲在Web應用程序的數據庫中。使用SAS的Azure Blob存儲授權

目前我有一個快速的臨時解決方案,它使用Web應用程序作爲運行授權的中間層,並且如果客戶端具有讀取BLOB的權限, 它首先從Azure中檢索,然後交付給客戶端。這當然不是由於許多原因而進行的最佳方式。

我已經開始使用SAS(共享訪問簽名)重建此部分,但無法找到設置系統的良好來源,該系統可隨着用戶和文件數量的增長而很好地擴展。我期待的用戶數量約爲100個,斑點數量約爲100000.

正如我所看到的,我有兩個選擇。

1)所有文件都有一個存儲在Web應用程序數據庫中的簽名,這用於所有有權訪問該文件的用戶。這將是簡單的方法, 但是,如果用戶由於某種原因不能訪問文件,他們仍然可以訪問文件,如果他們有早期訪問的鏈接。

2)對於每個有權訪問該文件的用戶,所有文件都有特定的簽名。這將使撤銷對文件的訪問變得容易,但簽名的數量將會很大,並且會產生任何副作用嗎?

還有其他選擇嗎?

對此的任何想法都非常感謝!

+1

是否有一個原因,你沒有考慮創建SAS和當它需要? –

+0

我想你的意思是SAS將被生成並添加到傳遞給客戶端的HTML中的URL中?這當然是一種選擇,但對於圖像,它們將以縮略圖(也存儲在Azure Blob存儲中)列出,所以如果我在頁面上有20個圖像,這意味着要在Azure之前生成20個往返才能生成簽名渲染。對? – moccasine

+0

您可以參考我的答案:http://stackoverflow.com/questions/39431608/limiting-account-sas-permission-to-specific-files-in-azure-storage/39432023#39432023 –

回答

0

與其爲每個用戶提供SAS,最好是按角色對文件進行分組,並將用戶映射到與用戶數量無關的容易縮放的角色。

不建議您直接訪問用戶blob,因爲您想通過應用程序分發blob內容。因此,提供具有特定用戶角色的應用程序訪問權限。

請參閱以下關於生成雙分鐘SAS的文章,該文章將在兩分鐘內過期,以便您鏈接的用戶長時間無法訪問圖像。

http://www.dotnetcurry.com/windows-azure/901/protect-azure-blob-storage-shared-access-signature

希望這會有所幫助。 :)

+0

感謝您的回答。使用兩分鐘的SAS將是一個想法,但這意味着對於顯示20個縮略圖的頁面而言,這意味着要向Azure生成20個往返才能生成簽名。如果我可以將文件分組並在羣組上設置簽名,那將是一件好事,但目前只能在容器級別上正確完成這項工作?然後,我必須創建> 100個容器才能在訪問組之後對文件進行分組。那不覺得正確的路要走? – moccasine