Что я пытаюсь сделать, так это подключиться к списку Blazs API хранения Azure Storage Rest. Ссылка: http://msdn.microsoft.com/en-us/library/windowsazure/dd135734.aspxAzure - вызов Storage rest api для списка blobs
Я попытался следовать http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx, чтобы указать заголовок авторизации, однако я получаю ошибку 403 - запрещено.
Код:
Uri address = new Uri("https://account.blob.core.windows.net/$logs?restype=container&comp=list");
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
req.Headers["x-ms-date"] = "2013-09-04";
req.Headers["x-ms-version"] = "2012-02-12";
req.Method = "GET";
string StringToSign = "GET\n"
+ "\n" // content encoding
+ "\n" // content language
+ "\n" // content length
+ "\n" // content md5
+ "\n" // content type
+ "\n" // date
+ "\n" // if modified since
+ "\n" // if match
+ "\n" // if none match
+ "\n" // if unmodified since
+ "\n" // range
+ "x-ms-date: 2013-09-04\nx-ms-version:2012-02-12\n" // headers
+ "/account/blob\ncomp:list\nrestype:container"; // resources
string accountName = "account";
string key = Convert.ToBase64String(Encoding.Default.GetBytes(StringToSign));
req.Headers["Authorization"] = string.Format("SharedKey {0}:{1}", accountName, key);
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
Можно ли увидеть какие-либо ошибки? Есть ли инструмент, который может генерировать ключ? Одна вещь, о которой я не уверен, - это кодирование/хэширование строки правильно.
Спасибо, Andrew
Обновление с последним кодом. Этот код дает мне Forbidden ошибку.
DateTime dt = DateTime.UtcNow;
string StringToSign = "GET\n"
+ "\n" // content encoding
+ "\n" // content language
+ "\n" // content length
+ "\n" // content md5
+ "\n" // content type
+ "\n" // date
+ "\n" // if modified since
+ "\n" // if match
+ "\n" // if none match
+ "\n" // if unmodified since
+ "\n" // range
+ "x-ms-date: " + dt.ToString("R") + "\nx-ms-version:2012-02-12\n" // headers
+ "/account/$logs\ncomp:list\nrestype:container";
string auth = SignThis(StringToSign, "accountkey", "account");
string method = "GET";
string urlPath = "https://account.blob.core.windows.net/$logs?restype=container&comp=list";
Uri uri = new Uri(urlPath);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = method;
request.Headers.Add("x-ms-date", dt.ToString("R"));
request.Headers.Add("x-ms-version", "2012-02-12");
request.Headers.Add("Authorization", auth);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
}
Когда вы говорите «есть инструмент, который может генерировать ключ», это делает меня подозрительным. Вы получаете ключ от страницы лазурного хранения на лазурном портале управления? – paqogomez
Да. Я новичок в Azure - у меня есть доступ к порталу, я имею в виду использовать ключ, который указан на портале? Или создать ключ через код выше? – andrewb
Теперь я вижу, что вы делаете с помощью «StringToSign». Это не то, что пример пытается вам рассказать. вы даете результат, а не значение для отправки. Позвольте мне что-то попробовать. Перетаскивание - это то, что у меня есть весь этот код на работе. – paqogomez