配置 Azure 存储连接字符串

连接字符串包含应用程序在运行时访问 Azure 存储帐户中的数据所需的身份验证信息。 可以将连接字符串配置为:

  • 连接到 Azure 存储模拟器。
  • 在 Azure 中访问存储帐户。
  • 通过共享访问签名 (SAS) 访问 Azure 中的指定资源。

Important

存储帐户密钥类似于存储帐户的根密码。 始终要小心保护帐户密钥。 避免将其分发给其他用户、对其进行硬编码或将其以纯文本形式保存在其他人可以访问的任何位置。 如果认为帐户密钥可能已泄漏,请使用 Azure 门户重新生成帐户密钥。

就像帐户访问密钥一样,对 SAS(共享访问签名)令牌进行保护至关重要。 然而,提供粒度 SAS 会授权客户端访问存储帐户中的资源,不应当将其公开共享。 如果出于故障排除原因而需要共享,请考虑使用日志文件的修订版本或者将 SAS 令牌从日志文件中删除(如果存在),并确保屏幕截图也不包含 SAS 信息。

Azure 建议尽量对 blob 和队列存储应用程序(预览版)使用 Azure Active Directory (Azure AD) 身份验证,以便增强安全性。 有关详细信息,请参阅使用 Azure Active Directory 对 Azure blob 和队列访问进行身份验证(预览版)

存储连接字符串

应用程序需要在运行时访问连接字符串,才能授权对 Azure 存储发出的请求。 可使用多个选项来存储连接字符串:

  • 在桌面或设备上运行的应用程序可在 app.configweb.config 文件中存储连接字符串。 将连接字符串添加到这些文件中的 AppSettings 节。
  • 在 Azure 云服务中运行的应用程序可在 Azure 服务配置架构 (.cscfg) 文件中存储连接字符串。 将连接字符串添加到服务配置文件的 ConfigurationSettings 节。
  • 可以直接在代码中使用连接字符串。 但是,在大多数情况下,我们建议在配置文件中存储连接字符串。

在一个配置文件中存储连接字符串可以轻松地更新连接字符串,从而在存储模拟器和云中的 Azure 存储帐户之间切换。 只需编辑连接字符串,使其指向目标环境。

无论应用程序在何处运行,都可以使用 Azure 配置管理器在运行时访问连接字符串。

为存储模拟器创建连接字符串

存储模拟器支持单一固定的帐户和众所周知的用于共享密钥身份验证的身份验证密钥。 此帐户和密钥是允许用于存储模拟器的唯一共享密钥凭据。 它们具有以下特点:

Account name: devstoreaccount1
Account key: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

Note

存储模拟器支持的身份验证密钥仅用于测试客户端身份验证代码的功能。 它没有任何安全用途。 不能在存储模拟器中使用生产存储帐户和密钥。 不应将开发帐户用于生产数据。

存储模拟器仅支持通过 HTTP 进行连接。 但是,若要访问生产性 Azure 存储帐户中的资源,建议使用 HTTPS 协议。

使用快捷方式连接到模拟器帐户

从应用程序连接到存储模拟器的最简单方式是在应用程序的配置文件内配置一个引用快捷方式 UseDevelopmentStorage=true 的连接字符串。 以下是 app.config 文件中指向存储模拟器的连接字符串示例:

<appSettings>
  <add key="StorageConnectionString" value="UseDevelopmentStorage=true" />
</appSettings>

使用从众所周知的帐户名称和密钥连接到存储模拟器

要创建引用存储模拟器帐户名称和密钥的连接字符串,必须在连接字符串中希望从模拟器中使用的每个服务指定终结点。 这是必须的,这样连接字符串将引用与生产存储帐户中的终结点不同的模拟器终结点。 例如,你的连接字符串的值将如下所示:

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;
AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;
BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;
TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;
QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;

此值等同于如上所示的快捷方式 UseDevelopmentStorage=true

指定 HTTP 代理

还可以指定一个 HTTP 代理,以便在针对存储模拟器测试服务时进行使用。 针对存储服务调试操作时,这对观察 HTTP 请求和响应很有用。 要指定代理,请将 DevelopmentStorageProxyUri 选项添加到连接字符串,并将它的值设置为代理 URI。 例如,下面是一个指向存储模拟器并配置 HTTP 代理的连接字符串:

UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://myProxyUri

有关存储模拟器的详细信息,请参阅使用 Azure 存储模拟器进行开发和测试

为 Azure 存储帐户创建连接字符串

若要为 Azure 存储帐户创建连接字符串,请使用以下格式。 指示要通过 HTTPS(建议)还是 HTTP 连接到存储帐户,将 myAccountName 替换为存储帐户的名称,将 myAccountKey 替换为帐户访问密钥:

DefaultEndpointsProtocol=[http|https];AccountName=myAccountName;AccountKey=myAccountKey;EndpointSuffix=core.chinacloudapi.cn

例如,连接字符串可能如下所示:

DefaultEndpointsProtocol=https;AccountName=storagesample;AccountKey=<account-key>;EndpointSuffix=core.chinacloudapi.cn

尽管 Azure 存储连接字符串同时支持 HTTP 和 HTTPS,但强烈建议使用 HTTPS。

Tip

可以在 Azure 门户中找到存储帐户的连接字符串。 导航到存储帐户菜单边栏选项卡中的“设置” > “访问密钥”,查看主访问密钥和辅助访问密钥的连接字符串。

使用共享访问签名创建连接字符串

如果拥有的共享访问签名 (SAS) URL 能够授予对存储帐户中资源的访问权限,则可以在连接字符串中使用 SAS。 由于 SAS 包含验证请求所需的信息,因此带 SAS 的连接字符串将提供协议、服务终结点以及访问资源所需的凭据。

若要创建包含共享访问签名的连接字符串,请按以下格式指定该字符串:

BlobEndpoint=myBlobEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
FileEndpoint=myFileEndpoint;
SharedAccessSignature=sasToken

尽管连接字符串必须至少包含一个服务终结点,但每个服务终结点都是可选的。

Note

建议最好配合使用 HTTPS 与 SAS。

如果在配置文件的连接字符串中指定 SAS,可能需要为 URL 中的特殊字符编码。

服务 SAS 示例

下面是包含 Blob 存储服务 SAS 的连接字符串示例:

BlobEndpoint=https://storagesample.blob.core.chinacloudapi.cn;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

下面是具有特殊字符编码的同一个连接字符串的示例:

BlobEndpoint=https://storagesample.blob.core.chinacloudapi.cn;
SharedAccessSignature=sv=2015-04-05&amp;sr=b&amp;si=tutorial-policy-635959936145100803&amp;sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

帐户 SAS 示例

下面是包含 Blob 和文件存储帐户 SAS 的连接字符串示例。 请注意,其中指定了两个服务的终结点:

BlobEndpoint=https://storagesample.blob.core.chinacloudapi.cn;
FileEndpoint=https://storagesample.file.core.chinacloudapi.cn;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

下面是具有 URL 编码的同一个连接字符串的示例:

BlobEndpoint=https://storagesample.blob.core.chinacloudapi.cn;
FileEndpoint=https://storagesample.file.core.chinacloudapi.cn;
SharedAccessSignature=sv=2015-07-08&amp;sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&amp;spr=https&amp;st=2016-04-12T03%3A24%3A31Z&amp;se=2016-04-13T03%3A29%3A31Z&amp;srt=s&amp;ss=bf&amp;sp=rwl

为显式存储终结点创建连接字符串

可以在连接字符串中指定显式服务终结点,而不使用默认终结点。 若要创建指定显式终结点的连接字符串,请使用以下格式为每个服务指定完整的服务终结点,包括协议规范(HTTPS(建议)或 HTTP):

DefaultEndpointsProtocol=[http|https];
BlobEndpoint=myBlobEndpoint;
FileEndpoint=myFileEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
AccountName=myAccountName;
AccountKey=myAccountKey

如果已将 Blob 存储终结点映射到自定义域,可能需要指定显式终结点。 在这种情况下,可以在连接字符串中指定 Blob 存储的自定义终结点。 可以选择性指定其他服务的默认终结点(如果应用程序使用这些服务)。

下面是用于指定 Blob 服务的显式终结点的连接字符串的示例:

# Blob endpoint only
DefaultEndpointsProtocol=https;
BlobEndpoint=http://www.mydomain.com;
AccountName=storagesample;
AccountKey=<account-key>

此示例指定所有服务(包括 Blob 服务的自定义域)的显式终结点:

# All service endpoints
DefaultEndpointsProtocol=https;
BlobEndpoint=http://www.mydomain.com;
FileEndpoint=https://myaccount.file.core.chinacloudapi.cn;
QueueEndpoint=https://myaccount.queue.core.chinacloudapi.cn;
TableEndpoint=https://myaccount.table.core.chinacloudapi.cn;
AccountName=storagesample;
AccountKey=<account-key>

连接字符串中的终结点值用于构造存储服务的请求 URI,以及指示返回到代码的任何 URI 形式。

如果已将某个存储终结点映射到自定义域并在连接字符串中省略该终结点,则无法使用该连接字符串从代码访问该服务中的数据。

Important

连接字符串中的服务终结点值必须是格式正确的 URI,包括 https://(推荐)或 http://。 由于 Azure 存储尚不支持对自定义域使用 HTTPS,因此,必须为指向自定义域的任何终结点 URI 指定 http://

创建带有终结点后缀的连接字符串

若要为区域(例如,Azure 中国区)或实例中的存储服务创建带有不同终结点后缀的连接字符串,请使用以下连接字符串格式。 指明是要通过 HTTPS(建议)还是 HTTP 连接到存储帐户,将 myAccountName 替换为存储帐户的名称,将 myAccountKey 替换为帐户访问密钥,将 mySuffix 替换为 URI 后缀:

DefaultEndpointsProtocol=[http|https];
AccountName=myAccountName;
AccountKey=myAccountKey;
EndpointSuffix=mySuffix;

下面是 Azure 中国区的存储服务的示例连接字符串:

DefaultEndpointsProtocol=https;
AccountName=storagesample;
AccountKey=<account-key>;
EndpointSuffix=core.chinacloudapi.cn;

分析连接字符串

适用于 .NET 的 Azure Configuration Manager 库 提供用于分析配置文件中连接字符串的类。 CloudConfigurationManager 类分析配置设置,而不考虑客户端应用程序是在台式计算机、移动设备、Azure 虚拟机还是 Azure 云服务中运行。

若要引用 CloudConfigurationManager 包,请添加以下 using 指令:

using Microsoft.Azure; //Namespace for CloudConfigurationManager
using Microsoft.WindowsAzure.Storage;

以下示例演示如何从配置文件中检索连接字符串:

// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

不一定非要使用 Azure 配置管理器。 也可以使用 API,例如 .NET Framework 的 ConfigurationManager 类。

后续步骤