создание подписи общего доступа Azure

Я использую С# для создания подписей общего доступа для новых ресурсов (пользователь должен иметь права на создание для создания новых ресурсов в моей учетной записи хранения). Документация MS устарела, и я не могу заставить ее работать, используя различные сообщения в блогах, которые я просмотрел.

Прямо сейчас мой код выглядит так:

public static string GetBlobSharedAccessSignitureUrl(CloudBlobContainer container,string nameOfBlobToCreateSaSfor)
        {
            var blob = container.GetBlockBlobReference(nameOfBlobToCreateSaSfor);
            var policy = new SharedAccessBlobPolicy
                             {
                                 SharedAccessExpiryTime = DateTime.Now.AddHours(1),
                                 Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read
                             };


            container.GetSharedAccessSignature(policy);
            string sas = blob.GetSharedAccessSignature(policy);

            return blob.Uri.AbsoluteUri + sas;

        }

и возвращенный URL-адрес (для моей локальной машины) выглядит так (что кажется правильным)

http://127.0.0.1:10000/devstoreaccount1/photos/photos_4.jpg?sv=2012-02-12&se=2013-01-20T10%3A13%3A17Z&sr=b&sp=rw&sig=xxx

Я запустил симулятор хранилища Azure и через fiddler попытался выполнить POST на этот URL-адрес (также попробовал PUT)

Я получаю ошибки (404 или 400, зависит от другого кода для этой функции, который я пробовал)

Нужно ли мне делать что-то еще? (В старых примерах я видел, как они заранее создавали ресурс в этом месте, что я тоже пробовал, но тоже не работал...)

Azure SDK версии 2.0, поэтому сообщения в блогах MS (и другие руководства) до октября 2012 г. не работают (также согласно блогу разработчиков MS http://blogs.msdn.com/b/windowsazurestorage/archive/2012/).29/10/windows-azure-storage-client-library-2-0-breaking-changes-amp-migration-guide.aspx)

любая помощь будет оценена


person Avner Barr    schedule 20.01.2013    source источник


Ответы (2)


Если вы публикуете сообщения через Fiddler или свой код, убедитесь, что вы добавили заголовок запроса «x-ms-blob-type» и установили его значение как «BlockBlob». Взгляните на этот пример кода, где он пытается загрузить файл:

                FileInfo fInfo = new FileInfo(fileName);//fileName is the full path of the file.
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(blobSaSUrl);
                NameValueCollection requestHeaders = new NameValueCollection();
                requestHeaders.Add("x-ms-blob-type", "BlockBlob");
                req.Method = "PUT";
                req.Headers.Add(requestHeaders);
                req.ContentLength = fInfo.Length;
                byte[] fileContents = new byte[fInfo.Length];
                using (FileStream fs = fInfo.OpenRead())
                {
                    fs.Read(fileContents, 0, fileContents.Length);
                    using (Stream s = req.GetRequestStream())
                    {
                        s.Write(fileContents, 0, fileContents.Length);
                    }
                    using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
                    {
                    }
                }
person Gaurav Mantri    schedule 20.01.2013

Создайте токен SAS, действительный в течение одного часа.

BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
    BlobContainerName = containerName,
    BlobName = blobName,
    Resource = "b",
    StartsOn = DateTimeOffset.UtcNow,
    ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
};

Укажите права на чтение для SAS.

sasBuilder.SetPermissions(BlobSasPermissions.Read);

Используйте ключ, чтобы получить токен SAS.

string sasToken = sasBuilder.ToSasQueryParameters(key, accountName).ToString();

Создайте полный URI, включая токен SAS.

UriBuilder fullUri = new UriBuilder()
{
    Scheme = "https",
    Host = string.Format("{0}.blob.core.windows.net", accountName),
    Path = string.Format("{0}/{1}", containerName, blobName),
    Query = sasToken
};
person rcruz    schedule 20.02.2020