导出 (0) 打印
全部展开
此主题尚未评级 - 评价此主题

针对对 Windows Azure 存储帐户的访问进行身份验证

更新时间: 2014年2月

您对 Windows Azure 存储服务的每个请求都必须经过身份验证,除非是针对公共容器或其 Blob 的匿名请求。Windows Azure 托管库可简化此身份验证过程。可通过两种方式对针对存储服务的请求进行身份验证:

  • 对 Blob、队列和表服务中的资源使用共享密钥或简易共享密钥身份验证方案。这些身份验证方案使用 HMAC,HMAC 使用 SHA-256 算法计算得出并且编码为 Base64。HMAC 从一组与请求相关的字段构造而来。有关协议的详细信息,请参见Windows Azure 存储服务身份验证

  • 创建共享访问签名。共享访问签名包含以安全方式对 URI 进行身份验证所需的凭据以及要访问的资源的地址。由于共享访问签名包含对 URI 进行身份验证所需的所有数据,因此它可用于授予对 Blob、队列或表服务中的资源的受控访问权限,还可独立于代码进行分发。有关协议的详细信息,请参见使用共享访问签名委托访问 (REST API)

如上所述,您可以指定某个容器应为公共容器,在这种情况下,可以匿名访问对该容器及其包含的任何 Blob 的所有读操作。匿名请求不需要进行身份验证,因此用户可以执行此操作而无需提供帐户凭据。有关管理容器和 Blob 访问的详细信息,请参见限制对容器和 Blob 的访问

Windows Azure .NET 托管库提供了一些关键类,用于针对对存储帐户的访问进行身份验证:

  • CloudStorageAccount 类表示 Windows Azure 存储帐户。

  • StorageCredentials 类存储两种不同类型的可用于对请求进行身份验证的凭据:存储帐户名称和访问密钥(可用于通过共享密钥和共享密钥 Lite 身份验证方案对请求进行身份验证);共享访问签名。

  • CloudBlobClientCloudQueueClientCloudTableClient 类分别提供 BLOB 服务、队列服务和表服务的资源层次结构的入口点。换言之,若要处理容器和 Blob,您将创建 CloudBlobClient 对象;若要处理队列和消息,您将创建 CloudQueueClient;若要处理表和实体,您将创建 CloudTableClient。可通过提供服务终结点和一组凭据直接创建客户端对象,也可通过调用 CreateCloudBlobClientCreateCloudQueueClientCreateCloudTableClient 方法之一从 CloudStorageAccount 对象创建客户端对象。这些方法允许您从使用一组凭据定义的 CloudStorageAccount 对象为一个或多个服务返回客户端对象。

    请注意,若要匿名访问容器或 Blob,您无需创建 CloudStorageAccount 或客户端对象。匿名访问不需要进行身份验证,因此您可以直接访问资源。通过匿名访问仅支持某些读取操作(使用 HTTP GET)。

您可使用 CloudStorageAccount.DevelopmentStorageAccount 属性返回引用已知存储仿真程序帐户的 CloudStorageAccount 对象。

此属性在您编写仅使用存储模仿真程序的代码时很有用,但如果您希望在完成针对存储仿真程序的测试后将代码指向 Windows Azure 存储帐户,则可能需要使用连接字符串。您可以快速修改连接字符串以在存储帐户之间切换,而不用修改代码;有关更多信息,请参见配置 Windows Azure 连接字符串

若要从代码访问 Windows Azure 存储帐户,最简单的方法是以 StorageCredentials 对象的形式提供存储帐户名称和访问密钥,并指示是使用 HTTP 还是使用 HTTPS 访问帐户,来创建新的 CloudStorageAccount 对象。通过此 CloudStorageAccount 或其派生对象之一提出的请求将使用这些凭据进行身份验证。

CloudStorageAccount 对象将默认终结点用于存储服务。默认服务终结点是 myaccount.blob.core.windows.netmyaccount.queue.core.windows.netmyaccount.table.core.windows.net,其中 myaccount 是存储帐户的名称。

以下代码示例演示如何使用对帐户名称和访问密钥的引用创建新的 CloudStorageAccount 对象。然后,创建新的 CloudBlobClient 对象,然后新容器:


// Account name and key.  Modify for your account.
string accountName = "myaccount";
string accountKey = "SzlFqgzqhfdk594cFoveYqCyvl8v9EESAnOLcTCeBIo31p46rJJRZx/5vU/oY3ZsK/VdFNaVpm6G8YSD2K48Nw==";

//Get a reference to the storage account, with authentication credentials
StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);

//Create a new client object.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve a reference to a container. 
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

// Create the container if it does not already exist.
container.CreateIfNotExists();

// Output container URI to debug window.
System.Diagnostics.Debug.WriteLine(container.Uri);

您还可以通过显式指定服务终结点来访问存储帐户。此方法在以下两种情况下很有用:

  • 通过共享访问签名访问存储帐户。

  • 您已为存储帐户配置自定义域,并且希望使用这些自定义终结点访问帐户。请注意,除自定义终结点外,默认终结点也继续可用。

共享访问签名是一种向其他客户端提供对存储帐户中资源的受控访问权限的方法。共享访问签名包含有关要访问的资源、要授予的权限、资源可用的时间间隔以及容器(如果存在一个)访问策略的信息。为方便进行身份验证,此类信息将封装在编码为 UTF-8 的 string-to-sign 中,然后使用 HMAC-SHA256 算法构造一个签名。该签名将形成客户端可用于访问资源的令牌组成部分。例如,客户端可使用共享访问签名在存储帐户中创建或删除 Blob,而当容器只标记为公用时,客户端没有对这类操作的访问权限。有关共享访问签名的详细信息,请参阅使用共享访问签名委托访问 (REST API)

另请参阅

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
显示:
© 2014 Microsoft. 版权所有。