Проверка подлинности запросов к пакетная служба Azure
Каждый запрос к службе Batch должен пройти проверку подлинности. Пакетная служба поддерживает проверку подлинности с помощью общего ключа или Microsoft Entra ID.
Проверка подлинности с помощью общего ключа
Для запроса, прошедшего проверку подлинности, требуется два заголовка: заголовок Date или ocp-date и заголовок Authorization . Следующие шаги описывают процесс создания этих заголовков.
Указание заголовка даты
Все запросы с проверкой подлинности должны включать отметку времени в формате UTC. Метку времени можно указать в заголовке ocp-date или в стандартном заголовке даты HTTP/HTTPS. Если для запроса указаны оба заголовка, в качестве времени создания запроса используется значение ocp-date .
Служба Batch должна получить запрос в течение 15 минут после его создания. В этом случае служба будет защищена от атак на систему безопасности, таких как атаки воспроизведения. Заголовок ocp-date предоставляется, так как некоторые клиентские библиотеки и прокси-серверы HTTP автоматически задают заголовок Date и не дают возможности прочитать его значение, чтобы включить его в запрос, прошедший проверку подлинности. Если вы задали ocp-date, создайте сигнатуру с пустым значением для заголовка Date .
Указание заголовка авторизации
Запрос, прошедший проверку подлинности, должен содержать заголовок авторизации . Для проверки подлинности запроса необходимо подписать запрос ключом учетной записи, которая выполняет запрос, и передать подпись в составе запроса.
Формат заголовка авторизации выглядит следующим образом:
Authorization="SharedKey <AccountName>:<Signature>"
где SharedKey
— название схемы авторизации, AccountName
— имя учетной записи, запрашивающей ресурс, а Signature
— код проверки подлинности на основе хэша (HMAC), построенный из запроса и вычисленный с помощью алгоритма SHA256, а затем закодированный в Base64.
В следующих разделах описывается создание заголовка Authorization .
Построение строки подписи
При создании строки подписи помните о следующем.
Часть VERB строки — это HTTP-команда, например GET или PUT, и она должна быть написана прописными буквами.
Каждый заголовок, включенный в строку подписи, может отображаться только один раз.
Значения всех стандартных заголовков HTTP необходимо включить в строку в порядке, показанном в формате подписи, без имен заголовков. Эти заголовки могут быть пустыми, если они не указаны как часть запроса; в таком случае требуется только символ новой линии.
Если используется команда POST, в качестве заголовков запроса и значений в строке подписи требуется указать значения параметров Content-Type и Content-Length. Content-Type должен иметь значение application/json; odata=minimalmetadata.
Если указан заголовок ocp-date , то заголовок Date не требуется. Просто укажите пустую строку для части Date строки подписи. В этом случае следуйте инструкциям в разделе Создание строки канонических заголовков , чтобы добавить заголовок ocp-date .
Все показанные символы новой линии (\n) необходимы в строке подписи.
Подробные сведения о построении строк
CanonicalizedHeaders
иCanonicalizedResource
, которые являются частью строки подписи, см. в соответствующих подразделах ниже.
Для кодирования строки подписи для запроса к службе Batch используйте следующий формат:
StringToSign = VERB + "\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 + "\n"
CanonicalizedHeaders +
CanonicalizedResource;
В следующем примере показана строка подписи для запроса на получение списка заданий в учетной записи с временем ожидания 20 секунд. Если значение заголовка не существует, указывается только символ новой строки.
GET\n\n\n\n\n\n\n\n\n\n\n\nocp-date:Tue, 29 Jul 2014 21:49:13 GMT\n /myaccount/jobs\napi-version:2014-01-01.1.0\ntimeout:20
В построчном разборе показана каждая часть одной и той же строки:
GET\n /*HTTP Verb*/
\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 */
ocp-date:Tue, 29 Jul 2014 21:49:13 GMT\n /*CanonicalizedHeaders*/
/myaccount/jobs\napi-version:2014-04-01.1.0\ntimeout:20 /*CanonicalizedResource*/
Затем закодируйте эту строку с помощью алгоритма HMAC-SHA256 для строки подписи в кодировке UTF-8, создайте заголовок Authorization и добавьте заголовок в запрос. В следующем примере показан заголовок Authorization для той же операции:
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Построение канонических строк заголовков
Чтобы построить часть CanonicalizedHeaders
строки подписи, выполните следующие действия.
Получение всех заголовков ресурса, которые начинаются с ocp-, включая заголовок ocp-date .
Преобразуйте все имена заголовков HTTP к нижнему регистру.
Лексикографически отсортируйте заголовки по имени в порядке возрастания. Каждый заголовок может появляться в строке только один раз.
Замените разрывные пробелы одинарным интервалом.
Усеките все пробелы вокруг двоеточия в заголовке.
Добавьте символ новой линии к каждому каноническому заголовку в полученном списке. Постройте строку
CanonicalizedHeaders
, объединив все заголовки в этом списке в одну строку.
Построение канонической строки ресурса
Часть строки подписи CanonicalizedResource
представляет ресурс службы Batch, который является целевым для запроса. Любая часть строки CanonicalizedResource
, выведенная из URI ресурса, должна быть кодирована точно так же, как в URI.
Учитывайте следующие правила для создания канонической строки ресурса.
Избегайте использования символа новой строки (\ n) в значениях параметров запроса. Если его необходимо использовать, убедитесь, что он не влияет на канонический формат строки ресурса.
Не используйте запятые в значениях параметра запроса.
Строку CanonicalizedResource
можно построить следующим образом.
Начните с косой черты ("/"), за которой следует имя учетной записи, которой принадлежит ресурс.
Добавьте закодированный URI путь к ресурсу без параметров запроса.
Получение всех параметров запроса в URI ресурса, включая параметр api-version .
Преобразуйте все имена параметров к нижнему регистру.
Лексикографически отсортируйте параметры запроса по имени параметра по возрастанию.
Закодируйте в URL имя параметра и значение для каждого запроса.
Добавьте имя и значение каждого параметра запроса к строке в следующем формате, включая двоеточие (:) между именем и значением.
parameter-name:parameter-value
Если параметр запроса имеет более одного значения, отсортируйте все значения лексикографически, а затем включите их в список с разделителями-запятыми:
parameter-name:parameter-value-1,parameter-value-2,parameter-value-n
Добавляйте символ новой строки (\ n) после каждой пары «имя-значение».
Кодирование сигнатуры
Для кодирования сигнатуры вызовите алгоритм HMAC-SHA256 для строки сигнатуры в кодировке UTF-8 и закодируйте результат в Base64. Используйте следующий формат (показан как псевдокод):
Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))
Проверка подлинности через Microsoft Entra ID
пакетная служба Azure поддерживает проверку подлинности с помощью Microsoft Entra ID, мультитенантного облачного каталога и службы управления удостоверениями Майкрософт. Azure использует Microsoft Entra ID для проверки подлинности собственных клиентов, администраторов служб и пользователей организации.
Примечание
Проверка подлинности с помощью Microsoft Entra ID необязательна, но рекомендуется. Она требуется только в том случае, если учетная запись пакетной службы настроена для выделения пулов в пользовательской подписке. Параметр выделения пула доступен при создании учетной записи пакетной службы. Если ваша учетная запись настроена для выделения пулов в подписке, управляемой пакетной службой, использование Microsoft Entra ID для проверки подлинности является необязательным. Дополнительные сведения см. в статье Пакетная служба — поддержка виртуальных сетей и пользовательских образов для пулов виртуальных машин.
Общие сведения о проверке подлинности запроса с помощью Azure AD см. в справочнике по REST API Azure. Чтобы использовать Azure AD с пакетной службой, вам потребуются следующие конечные точки.
Общая конечная точка Azure AD:
https://login.microsoftonline.com/common
Конечная точка ресурсов для пакетной службы:
https://batch.core.windows.net/
Дополнительные сведения о регистрации приложения пакетной службы в Microsoft Entra ID см. в статье Проверка подлинности служб пакетная служба Azure с помощью Microsoft Entra ID.