Microsoft.Azure.Storage.Blob
11.2.3.0 和 Microsoft.Azure.Storage.Common
11.2.3.0 从 .NET Core 3.1 应用程序连接到 Azure BlobStorage。
我的应用程序的用户应该向应用程序将存储/检索数据的 Azure BlobStorage 提供连接信息。
最初,我假设允许用户指定 连接字符串 和自定义 Blob 容器名称(作为默认值的可选覆盖)就足够了。我可以简单地将连接字符串填充到
CloudStorageAccount.Parse
方法中,然后返回一个存储帐户实例来调用 CreateBlobCloudClient
。
现在我尝试使用此方法使用特定于容器的 SAS 进行连接(另请参阅我的其他问题),看来连接字符串可能不是最通用的方法。
相反,现在看来 Blob 容器 URL 加上 SAS 令牌 或 帐户密钥(可能还有帐户名,认为它似乎已包含在 Blob 容器 URL 中)更加通用。但是,我担心下一种指向我需要支持的 blob 存储的方式(无论哪种方式)可能需要另一种信息 - 因此我的问题是:
我的应用程序的配置文件中需要支持哪组“字段”,以确保我的用户可以以他们想要的任何方式指向他们的 BlobStorage,只要他们拥有 BlobStorage?
(微软是否有标准解决方案或最佳实践建议?)
请注意,我只关心要存储什么。任意长的字符串?某种复杂的物体?如果是的话,用什么字段?
一旦我知道它必须包含什么内容,我就不会问如何存储该配置。例如,这不是关于安全加密凭证等。
解决方法 要使用 SAS 令牌访问存储帐户,如果您尝试上传,则需要传递 帐户名称以及 SAS 令牌和 Blob 名称,并且需要授予 SAS 令牌权限。
如果可能,Microsoft 建议使用 Azure Active Directory (Azure AD) 来授权针对 blob 和队列数据的请求,而不是使用共享密钥。与共享密钥相比,Azure AD 提供卓越的安全性和易用性。有关使用 Azure AD 授权访问数据的详细信息,请参阅使用 Azure Active Directory 授权访问 Azure blob 和队列。.
注意:根据我的测试,您需要传递存储帐户名称和 SAS 令牌以及容器名称和 Blob 名称
示例:我尝试使用容器级 SAS Token 将文件上传到容器。能够成功上传文件。
const string sasToken = "SAS Token";
StorageCredentials storageCredentials = new StorageCredentials(sasToken);
const string accountName = "teststorage65";//Account Name
const string blobContainerName = "test";
const string blobName = "test.txt";
const string myFileLocation = @"Local Path ";
var storageAccount = new CloudStorageAccount(storageCredentials, accountName, null, true);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(blobContainerName);
//blobContainer.CreateIfNotExists();
CloudBlockBlob cloudBlob = blobContainer.GetBlockBlobReference(blobName);
cloudBlob.UploadFromFile(myFileLocation);
正如您所知,您可以使用 存储连接字符串 来连接存储。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("Connection string");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("test");
您的应用程序需要在运行时访问连接字符串以授权向 Azure 存储发出的请求。您有多种选项可用于存储连接字符串或 SAS 令牌
1) 您可以将连接字符串存储在环境变量中。
2) 在桌面或设备上运行的应用程序可以将连接字符串存储在 app.config 或 web.config 文件中。将连接字符串添加到这些文件中的 AppSettings 部分。
3) 在 Azure 云服务中运行的应用程序可以将连接字符串存储在 Azure 服务配置架构 (.cscfg) 文件中。将连接字符串添加到服务配置文件的 ConfigurationSettings 部分。
参考:https://learn.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string