銷售: 1-800-867-1380

建立及使用共用存取簽章

更新日期: 2015年1月

共用存取簽章是一個 URL,它會將限制的存取權限授與容器、Blob、佇列及資料表一段指定的時間間隔。藉由提供共用存取簽章給用戶端,就可以讓他們存取您儲存體帳戶中的資源,而不需與他們共用您的帳戶金鑰。

note附註
如需深入的概念性概觀和共用存取簽章的相關教學課程,請參閱共用存取簽章

支援使用共用存取簽章的作業包括:

  • 讀取及寫入分頁或區塊 Blob 內容、區塊清單、屬性及中繼資料

  • 刪除、租用及建立 Blob 的快照集

  • 列出容器中的 Blob

  • 加入、移除、更新及刪除佇列訊息 (適用於儲存體用戶端程式庫 2.0 版及更新版本)

  • 取得佇列中繼資料,包含訊息計數 (適用於儲存體用戶端程式庫 2.0 版及更新版本)

  • 查詢、新增、更新、刪除及更新插入資料表實體 (適用於儲存體用戶端程式庫 2.0 版及更新版本)

共用存取簽章 URI 查詢參數包含授與儲存體資源之控制存取的所有必要資訊。此 URI 查詢參數可指定共用存取簽章有效的時間間隔、其授與的權限、所要提供的資源,以及儲存體服務應用於驗證要求的簽章。

此外,共用存取簽章 URI 可參考儲存的存取原則,針對一組簽章提供額外一層的控制,包括視需要修改或撤銷資源存取的功能。如需預存存取原則的詳細資訊,請參閱使用儲存的存取原則

如需共用存取簽章之 URI 格式的詳細資訊,請參閱以共用存取簽章委派存取

共用存取簽章會授與對 URI 的授與權限所指定資源的存取權限。您應該一律使用 HTTPS 建構共用存取簽章 URI。使用 HTTP 搭配共用存取簽章可能容易讓您的儲存體帳戶遭到惡意使用。

如果共用存取簽章授與的權限並非供一般大眾使用,則應該盡可能使用最少的權限建構。此外,共用存取簽章應透過安全的連線安全地散佈至用戶端,應該與預存存取原則產生關聯以供撤銷時使用,並且應盡可能指定最短的簽章存留期間。

Important重要事項
共用存取簽章 URI 會與用來建立簽章的帳戶金鑰,以及相關的預存存取原則 (如果有的話) 產生關聯。如果未指定預存存取原則,則撤銷共用存取簽章的唯一方式是變更帳戶金鑰。

下列程式碼範例會在容器上建立存取原則,然後為容器產生共用存取簽章。接著就可將此共用存取簽章提供給用戶端:

// The connection string for the storage account.  Modify for your account.
string storageConnectionString =
   "DefaultEndpointsProtocol=https;" +
   "AccountName=myaccount;" +
   "AccountKey=<account-key>";

// As an alternative, you can retrieve storage account information from an app.config file. 
// This is one way to store and retrieve a connection string if you are 
// writing an application that will run locally, rather than in Windows Azure.

// string storageConnectionString = ConfigurationManager.AppSettings["StorageAccountConnectionString"];

// Create the storage account with the connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
                                               
// Create the blob client object.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Get a reference to the container for which shared access signature will be created.
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExists();

// Create blob container permissions, consisting of a shared access policy 
// and a public access setting. 
BlobContainerPermissions blobPermissions = new BlobContainerPermissions();

// The shared access policy provides 
// read/write access to the container for 10 hours.
blobPermissions.SharedAccessPolicies.Add("mypolicy", new SharedAccessBlobPolicy()
{
   // To ensure SAS is valid immediately, don’t set start time.
   // This way, you can avoid failures caused by small clock differences.
   SharedAccessExpiryTime = DateTime.UtcNow.AddHours(10),
   Permissions = SharedAccessBlobPermissions.Write |
      SharedAccessBlobPermissions.Read
});

// The public access setting explicitly specifies that 
// the container is private, so that it can't be accessed anonymously.
blobPermissions.PublicAccess = BlobContainerPublicAccessType.Off;

// Set the permission policy on the container.
container.SetPermissions(blobPermissions);

// Get the shared access signature to share with users.
string sasToken =
   container.GetSharedAccessSignature(new SharedAccessBlobPolicy(), "mypolicy");

收到共用存取簽章的用戶端可以從程式碼中用它來建構 StorageCredentials 類型的物件。這些認證可以用來建構搭配資源使用的 CloudStorageAccountCloudBlobClient 物件,如下面範例中所示:

Uri blobUri = new Uri("https://myaccount.blob.core.windows.net/mycontainer/myblob.txt");
            
// Create credentials with the SAS token. The SAS token was created in previous example.
StorageCredentials credentials = new StorageCredentials(sasToken);

// Create a new blob.
CloudBlockBlob blob = new CloudBlockBlob(blobUri, credentials);

// Upload the blob. 
// If the blob does not yet exist, it will be created. 
// If the blob does exist, its existing content will be overwritten.
using (var fileStream = System.IO.File.OpenRead(@"c:\Test\myblob.txt"))
{
    blob.UploadFromStream(fileStream);
}

另請參閱

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見
顯示:
© 2015 Microsoft