Как получить доступ к хранилищу BLOB-объектов Azure через приложение Flex? - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь получить доступ к хранилищу BLOB-объектов в Azure через приложение Flex. Я делаю это через HTTP-сервис, используя URL-адрес, предоставленный хранилищем BLOB-объектов Azure. Однако мое хранилище имеет частный и ограниченный доступ, и я могу обновить хранилище только с помощью ключа (предоставленного Azure). Поскольку мое приложение должно записывать в это хранилище, мне как-то нужно передать ключ через мой HTTPService? Кто-нибудь знает, как я могу это сделать?

С уважением Aparna

Ответы [ 4 ]

0 голосов
/ 01 февраля 2011

Я не уверен, что Flex поддерживает Java, но если это так, то вместо написания ваших собственных оболочек ActionScript для реализации API Azure REST вы можете использовать Windows Azure SDK для Java. Более подробную информацию об этом можно найти здесь: http://www.windowsazure4j.org/

0 голосов
/ 31 января 2011

Итак, первый шаг - обратиться к API REST хранилища Azure и создать HTTP-запрос, который вы хотите использовать для своей операции, следуя спецификациям API.

Как только вы это сделаете, у вас будет один заголовок (Авторизация) , для которого вам нужно будет создать строку.Это сложная часть, когда у вас нет готовой библиотеки.

Конечная цель - просто установить и передать заголовок Authorization в объект HTTPService.Он будет содержать ваш общий ключ вместе с подписью.Этот ключ представляет собой длинную строку, представляющую запрос, который затем подписывается вашим ключом Azure.Я действительно не знаю синтаксиса Flex / AS, поэтому я сделаю все возможное, чтобы просто описать решение, и вы можете его реализовать.


Эта подпись - это строка, которую вы подписываете ключом.Эта строка представляет собой комбинацию следующих элементов:

  • HTTP-метод / глагол, используемый в запросе
  • значение заголовка Content-MD5
  • Content-введите значение заголовка
  • Дата
  • объединенная строка всех специфических для Azure ("x-ms- *") заголовков
  • объединенная строка имени учетной записи Azure+ путь к BLOB-объекту, к которому вы обращаетесь

Итак, вы хотите собрать / создать все это, объединить строку со всеми из них, создать подпись этой строки, используя свой ключ, передать ее в

Важно отметить, что, поскольку вы отправляете все это в одном запросе, значения этих заголовков просто основаны на том, что вы передаете. Поэтому необязательные поля (такие как Content-MD5), которые вы бы не сталиОбязательно используйте для этого может быть пустым, вы просто должны их передать.Сигнатура просто основана на том, что вы отправляете, нет двухфакторной проверки.

Шаг 1 : Соберите данные, просто сохраните каждый из них в переменной,или создайте на лету, когда вы строите свою строку для подписи.

Метод HTTP - все, что вы пытаетесь сделать с Azure.Если читаете, используйте GEt.При создании используйте POST.При изменении используйте PUT.и т.д. ... Это просто соответствует тому, что вы уже делаете

Content-MD5 - как уже упоминалось, нам не нужно создавать дайджест здесь, просто используйте новую строку ("\n "в C #)

Content-Type - у объекта HTTPService есть это поле.Установите его в зависимости от того, что вы делаете с API, затем снова обратитесь к подписи.

Дата - опять же, это необязательно, поскольку запросы Azure передают настраиваемый заголовок для даты.Просто добавьте новую строку снова.Если вы хотите передать дату, это нормально, просто убедитесь, что вы указали здесь одно и то же значение

Заголовки - Это немного зависит от языка, поэтому я просто опишу.Вам нужно создать свой объект запроса (на основе API Azure), затем получить доступ к массиву заголовков запроса, перебрать каждый из них, найти те, которые начинаются с "x-ms-", и построить из них длинную строку.Вам также нужно обрабатывать дубликаты (не передавать) и пробелы.

Так что, если у меня было 5 заголовков по моему запросу:

  • ContentType: text / xml
  • eTag: 10101010
  • x-ms-версия: 2009-09-19
  • x-ms-метаданные: SomeData

моя строка заголовка будет Headers[x-ms-version] +Headers[x-ms-metadata] или

"2009-09-19SomeData"

Ресурсы - это только ваши Azure Storage Account Name + the request Uri, к которым вы обращаетесь.

Шаг 2 : Создайте строку для подписи. Итак, у вас есть все это, создайте строку из всех этих переменных:

string strToSign = HttpMethoid + Content-MD5 +
   Content-Type + Date + HeadersStr + ResourceStr

Шаг 3 : Подпишите строку с помощьюключ хранения

Создайте хэш HMAC-SHA256 из этой строки, используя ключ учетной записи хранения. вам, вероятно, придется скачать библиотеку расширений для Flex.Я не верю, что он содержит шифрование по умолчанию.Просто Google HMAC-SHA256 Flex и использовать один из них

Шаг 4 : создать заголовок авторизацииПолучив этот хеш, вы берете все это и создаете заголовок авторизации.Формат:

authString = "SharedKey" + [AzureAccountName] + [Signed String you just created]

добавьте это к запросу, что-то вроде

req.Headers.Add("Authorization", authString);

Если вы все сделали правильно, запрос будет работать.Если нет, вы получите 403. Как только вы это сделаете правильно, сохраните его в библиотеке, потому что, поверьте мне, вы не хотите перестраивать :)

0 голосов
/ 31 января 2011

Вам необходимо передать свой ключ в заголовок HTTP.Вы можете ознакомиться с этим материалом, в котором рассказывается, как общаться с хранилищем Azure через API REST, включая обновление значения заголовка: http://msdn.microsoft.com/en-us/library/dd179428.aspx

Если вас интересуют некоторые примеры кода .NET, используйте Reflector в MicrosoftСборка .WindowsAzure.StorageClient, поставляемая с Windows Azure SDK, чтобы увидеть, как они это делают.

0 голосов
/ 31 января 2011

В хранилище Azure используется REST Api, который просто упакован инструментами. Вот официальная реклама:

http://msdn.microsoft.com/en-us/library/dd179355.aspx

Краткий справочник по "Get Blob"

http://msdn.microsoft.com/en-us/library/dd179440.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...