Я не могу получить политики общего доступа для работы с виртуальными каталогами в хранилище blob. Он отлично подходит для контейнеров. Насколько я знаю, виртуальные каталоги являются контейнерами, поэтому SAS должен работать?Виртуальные каталоги хранения Azure Blob с использованием сигнатур общего доступа
При попытке получить доступ к ресурсу в виртуальном каталоге с помощью SAS я получаю такой ответ:
<?xml version="1.0" encoding="utf-8"?>
<Error>
<Code>AuthenticationFailed</Code>
<Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:XXXXXXXX-000X-00XX-XXXX-XXXXXX000000 Time:2016-08-15T13:28:57.6925768Z</Message>
<AuthenticationErrorDetail>Signature did not match. String to sign used was r 2016-08-15T13:29:53Z /blob/xxxxxxxxxx/mycontainer 2015-12-11</AuthenticationErrorDetail>
</Error>
Пример кода для демонстрации:
public static async Task<string> GetFilePath()
{
var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=xxxxxxxxxx;AccountKey=xxxxxxxxxx");
var blobClient = storageAccount.CreateCloudBlobClient();
var containerName = "mycontainer/myvd"; // remove /myvd and SAS will work fine
var containerReference = blobClient.GetContainerReference(containerName);
var blobName = "readme.txt";
var blobReference = await containerReference.GetBlobReferenceFromServerAsync(blobName);
var sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(1);
sasConstraints.Permissions = SharedAccessBlobPermissions.Read;
var sasContainerToken = containerReference.GetSharedAccessSignature(sasConstraints);
var path = $"{blobClient.BaseUri.ToString()}{containerName}/{blobName}{sasContainerToken}";
return path;
}
Спасибо, прекрасно. – Paul