如何向 Azure 存储 Blob 上传添加身份验证
Posted
技术标签:
【中文标题】如何向 Azure 存储 Blob 上传添加身份验证【英文标题】:How to add authentication to Azure storage blob upload 【发布时间】:2021-06-03 04:55:18 【问题描述】:我正在尝试将图像上传到 Azure Blob 存储。我正在使用 .Net Core 和 Azure.Storage.Blobs v12.8.0。
以下代码是我目前所拥有的。
try
var documentByteArray = // a valid byte array of a png file
var blobUri = new Uri("https://mystorageaccount.blob.core.windows.net/images/myfile.png");
BlobClient blobClient = new BlobClient(blobUri);
using (MemoryStream stream = new MemoryStream(documentByteArray))
await blobClient.UploadAsync(stream, true, default);
await blobClient.SetHttpHeadersAsync(new BlobHttpHeaders
ContentType = "image/png"
);
catch (Exception ex)
//
...但在某种程度上可以预见它会失败,但 Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
除外。我说可预测是因为我没有添加任何身份验证...
这就是问题/问题。如何添加身份验证以便上传?
我知道有可以使用的访问密钥 - 但如何使用?我在 MS 文档中找不到任何示例。
感谢任何见解。
【问题讨论】:
【参考方案1】:如果您有权访问 Azure 门户,则可以获得存储帐户的连接字符串(在“访问密钥”部分下)。
获得连接字符串后,您可以使用以下代码:
var connectionString = "your-storage-account-connection-string";
var containerName = "images";
var blobName = "myfile.png";
var blobClient = new BlobClient(connectionString, containerName, blobName);
//do the upload here...
其他选项是使用存储帐户名称和访问密钥(同样您可以从 Azure 门户获取)。你会做这样的事情:
var accountName = "account-name";
var accountKey = "account-key";
var blobUri = new Uri("https://mystorageaccount.blob.core.windows.net/images/myfile.png");
var credentials = new StorageSharedKeyCredential(accountName, accountKey);
var blobClient = new BlobClient(blobUri, credentials);
//do the upload here...
您可以在此处找到有关 BlobClient 构造函数的更多信息:https://docs.microsoft.com/en-us/dotnet/api/azure.storage.blobs.blobclient?view=azure-dotnet。
【讨论】:
这正是我所需要的!谢谢你的帮助:o)【参考方案2】:您应该通过 CloudStorageAccount 实例上传您的 Blob,如下所示:
var storageAccount = new CloudStorageAccount(
new StorageCredentials("<your account name>", "<your key>"),
"core.windows.net",
true);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference(fileName);
await blob.UploadFromStreamAsync(stream);
【讨论】:
如果我没记错的话,上面的代码是针对旧版 SDK 而不是 OP 使用的 12.8.0 版本。 感谢您的快速回答,但@GauravMantri 是正确的,不幸的是这是旧版本以上是关于如何向 Azure 存储 Blob 上传添加身份验证的主要内容,如果未能解决你的问题,请参考以下文章
由于授权标头,Azure Blob 存储 403 身份验证失败
使用 Azure 逻辑应用添加或修改 blob 时如何获取上传文件的文件名?
在 Azure Blob 存储中上传文件时出现 InvalidAuthenticationInfo 错误
Flutter AZURE BLOB IMAGE UPLOAD - 如何将使用移动相机拍摄的图像上传到 azure blob 存储