【发布时间】:2019-01-06 16:50:56
【问题描述】:
我正在研究使用 Azure AD 来验证对 Azure 存储帐户的访问。
using Microsoft.Azure.Services.AppAuthentication; // 1.1.0-preview
using Microsoft.WindowsAzure.Storage; // 9.3.0
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Queue;
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
string storageAccountName = "fill_in";
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://storage.azure.com/");//, tenantId);
TokenCredential tokenCredential = new TokenCredential(accessToken);
StorageCredentials storageCredentials = new StorageCredentials(tokenCredential);
// blobs access
CloudBlobClient cloudBlobClient = new CloudBlobClient(new StorageUri(new Uri($"https://{storageAccountName}.blob.core.windows.net")), storageCredentials);
ContainerResultSegment containerResultSegment = await cloudBlobClient.ListContainersSegmentedAsync(null);
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("test" + DateTime.Now.Ticks);
await cloudBlobContainer.CreateIfNotExistsAsync();
// queue access
CloudQueueClient cloudQueueClient = new CloudQueueClient(new StorageUri(new Uri($"https://{storageAccountName}.queue.core.windows.net")), storageCredentials);
QueueResultSegment queueResultSegment = await cloudQueueClient.ListQueuesSegmentedAsync(null);
CloudQueue cloudQueue = cloudQueueClient.GetQueueReference("test" + DateTime.Now.Ticks);
await cloudQueue.CreateIfNotExistsAsync();
// table access
CloudTableClient cloudTableClient = new CloudTableClient(new StorageUri(new Uri($"https://{storageAccountName}.table.core.windows.net")), storageCredentials);
// this http request results in "HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature."
TableResultSegment tableResultSegment = await cloudTableClient.ListTablesSegmentedAsync(null);
CloudTable cloudTable = cloudTableClient.GetTableReference("test" + DateTime.Now.Ticks);
await cloudTable.CreateIfNotExistsAsync();
}
}
尝试使用表,导致 Microsoft.WindowsAzure.Storage.StorageException: 'Server failed to authenticate the request。确保 Authorization 标头的值格式正确,包括签名。'
在 portal.azure.com 我确实看到了角色
- 存储 Blob 数据 ___(预览版)
- 存储队列数据___(预览版)
现在以这种方式使用 Azure 存储表超出了范围,还是我遗漏了什么?
问候, 弗洛里安
【问题讨论】:
标签: c# azure .net-core azure-storage