Итак, первый шаг - обратиться к 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. Как только вы это сделаете правильно, сохраните его в библиотеке, потому что, поверьте мне, вы не хотите перестраивать :)