2016-08-19 88 views
1

我有一個MVC應用程序,其中用戶列表可以上傳文件到GoogleDrive/DropBox,爲此他們只需要驗證自己,相應的API提供了一個'AccessToken'或其他進一步用於從我的Web應用程序上傳文件到用戶帳戶。訪問登錄用戶的Azure Blob存儲

現在我需要對Azure Blob存儲做同樣的事情。爲了測試我創建了一個帳戶,並有使用帳戶名和創建Accountkey其做同樣的這樣一個連接字符串:

public void UploadFileToBlob1(string fileName, byte[] fileData) 
    { 
     // Retrieve storage account from connection string. 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(System.Configuration.ConfigurationManager.AppSettings["StorageConnectionString"]); 

     // Create the blob client. 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

     // Retrieve reference to a previously created container. 
     CloudBlobContainer container = blobClient.GetContainerReference("portalcontainer"); 
     container.CreateIfNotExists(); 

     // Retrieve reference to a blob named "myblob". 
     CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName); 

     // Create or overwrite the "myblob" blob with contents from a local file. 
     Stream stream = new MemoryStream(fileData); 
     blockBlob.UploadFromStream(stream); 
    } 

現在,我想使用戶誰登錄到我的應用程序,可以做同樣的。

因此,在Azure blob存儲的情況下,我可以如何在Blob存儲帳戶上對已登錄的用戶進行身份驗證,並獲取'accesstoken'或其他內容以在用戶blob容器上執行文件上載/下載。

請告知目前不支持Azure存儲

+1

您是否調查過共享訪問簽名是否符合您的要求? https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-1/ –

+0

是的,但共享訪問簽名也需要帳戶密鑰。 –

回答

2

用戶特定的基於令牌的訪問。

但是,我想提出一種替代方法。看看這是否有道理(這基本上延伸了趙興的評論)。

對於您的應用程序的每個用戶,您所做的是創建一個blob容器(一種主目錄)。當用戶登錄時,您可以使用適當的權限爲該容器創建一個Shared Access Signature (SAS)。用戶因此將能夠訪問該容器中的資源。由於SAS是爲特定容器創建的,因此用戶使用該SAS令牌訪問另一個容器的任何嘗試都將導致錯誤。

+0

所以爲此我需要使用我的帳戶來創建SAS,對吧?我無法訪問登錄的用戶帳戶,就像我們可以在谷歌驅動器的情況下,對嗎? –

+0

這是正確的。 –

+0

感謝Gaurav的回覆...... –