配置 Azure 存储连接字符串

连接字符串包含应用程序在运行时使用共享密钥授权访问 Azure 存储帐户中的数据所需的授权信息。 可以将连接字符串配置为:

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

若要了解如何查看帐户访问密钥并复制连接字符串,请参阅管理存储帐户访问密钥

保护访问密钥

存储帐户访问密钥类似于存储帐户的根密码。 始终要小心保护访问密钥。 使用 Azure 密钥保管库安全地管理和轮换密钥。 避免将访问密钥分发给其他用户、对其进行硬编码或将其以纯文本形式保存在其他人可以访问的任何位置。 如果你认为访问密钥可能已泄露,请轮换密钥。

备注

Azure 建议使用 Azure Active Directory (Azure AD) 而不是共享密钥来为针对 Blob 和队列数据的请求授权(如果可能)。 Azure AD 通过共享密钥提供更高的安全性和易用性。 有关使用 Azure AD 授权访问数据的详细信息,请参阅使用 Azure Active Directory 授权访问 Azure Blob 和队列

存储连接字符串

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

  • 可以将连接字符串存储在环境变量中。
  • 在桌面或设备上运行的应用程序可在 app.configweb.config 文件中存储连接字符串。 将连接字符串添加到这些文件中的 AppSettings 节。
  • 在 Azure 云服务中运行的应用程序可在 Azure 服务配置架构 (.cscfg) 文件中存储连接字符串。 将连接字符串添加到服务配置文件的 ConfigurationSettings 节。

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

可以使用 Microsoft Azure Configuration Manager 在运行时访问连接字符串,而不考虑应用程序在何处运行。

为 Azurite 配置连接字符串

模拟器支持单一固定的帐户和众所周知的用于共享密钥身份验证的身份验证密钥。 此帐户和密钥是允许用于模拟器的唯一共享密钥凭据。 它们分别是:

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

备注

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

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

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

从应用程序连接到模拟器的最简单方式是在应用程序的配置文件内配置一个引用快捷方式 UseDevelopmentStorage=true 的连接字符串。 该快捷方式等效于模拟器的完整连接字符串,该字符串指定每个 Azure 存储服务的帐户名、帐户密钥和模拟器终结点:

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;
AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;
EndpointSuffix=core.chinacloudapi.cn;
BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;
QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;
TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;

下面的 .NET 代码片段显示了如何通过采用连接字符串的方法使用该快捷方式。 例如,BlobContainerClient(String, String) 构造函数采用连接字符串。

BlobContainerClient blobContainerClient = new BlobContainerClient("UseDevelopmentStorage=true", "sample-container");
blobContainerClient.CreateIfNotExists();

在调用代码片段中的代码之前,请确保模拟器正在运行。

有关 Azurite 的详细信息,请参阅使用 Azurite 模拟器进行本地 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

提示

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

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

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

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

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

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

备注

建议最好配合使用 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 形式。

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

若要详细了解如何为 Azure 存储配置自定义域,请参阅将自定义域映射到 Azure Blob 存储终结点

重要

连接字符串中的服务终结点值必须是格式正确的 URI,包括 https://(推荐)或 http://

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

若要针对具有不同终结点后缀的区域或实例内的存储服务创建连接字符串,例如针对 Azure 中国世纪互联或 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 的 Microsoft Azure Configuration Manager 库 提供用于分析配置文件中连接字符串的类。 CloudConfigurationManager 类会分析配置设置。 它分析在桌面、移动设备、Azure 虚拟机或 Azure 云服务中运行的客户端应用程序的设置。

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

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

下面的示例演示了如何检索配置文件中的连接字符串:

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

可以选择使用 Azure Configuration Manager。 还可以使用 API,例如 .NET Framework 的 ConfigurationManager 类

后续步骤