Проверка подлинности в REST API azure Управление API для прямого управления
В этом руководстве описывается, как создать маркер доступа (маркер SAS), необходимый для вызовов прямого управления Azure Управление API REST API.
Дополнительные сведения об авторизации и других предварительных требованиях для доступа к REST API прямого управления см. в статье Прямое управление Управление API REST API.
Важно!
Доступ к маркеру SAS можно применять только для вызовов API прямого управления, например https://apim-instance.management.azure-api.net/ /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis?api-version=2021-08-01
: . Его нельзя использовать для вызовов API к Azure Resource Manager.
Создание маркера SAS вручную
Перейдите к экземпляру Управления API Azure на портале Azure.
Выберите API управления в разделе Развертывание и инфраструктура меню слева.
В разделе Включить УПРАВЛЕНИЕ API REST API выберите Да.
Важно!
Если параметр Включить Управление API REST API не выбран, вызовы REST API для этого экземпляра службы завершатся ошибкой.
В поле Окончание срока действия задайте дату и время окончания срока действия маркера доступа. Значение должно быть указано в формате
MM/DD/YYYY H:MM PM|AM
.Выберите первичный или вторичный ключ в раскрывающемся списке Секретный ключ . Ключи предоставляют соответствующий доступ. Наличие двух ключей позволяет использовать гибкие стратегии управления ключами.
Выберите Создать , чтобы создать маркер доступа.
Скопируйте маркер полного доступа и указывайте его в заголовке
Authorization
каждого запроса к API REST управления API, как показано в следующем примере.Authorization: SharedAccessSignature integration&201808020500&aAsTE43MAbKMkZ6q83Z732IbzesfsaPEU404oUjQ4ZLE9iIXLz+Jj9rEctxKYw43SioCfdLaDq7dT8RQuBKc0w==
Программное создание маркера SAS
Создайте строку для входа в следующем формате:
{identifier} + "\n" + {expiry}
где:
identifier
— значение поля Идентификатор на вкладке API управления экземпляра Управление API Azure (дополнительные сведения см. в предыдущем разделе).
expiry
— требуемая дата истечения срока действия маркера SAS.Создайте подпись путем применения функции хэша HMAC-SHA512 к строке для входа с использованием первичного или вторичного ключа.
Закодируйте возвращенный ключ подписи в формате Base64.
Создайте маркер доступа в следующем формате.
uid={identifier}&ex={expiry}&sn={Base64 encoded signature}
Пример
uid=53dd860e1b72ff0467030003&ex=2014-08-04T22:03:00.0000000Z&sn=ItH6scUyCazNKHULKA0Yv6T+Skk4bdVmLqcPPPdWoxl2n1+rVbhKlplFrqjkoUFRr0og4wjeDz4yfThC82OjfQ==
Используйте эти значения для создания заголовка
Authorization
в каждом запросе к API REST управления API, как показано в следующем примере.Authorization: SharedAccessSignature uid=53dd860e1b72ff0467030003&ex=2014-08-04T22:03:00.0000000Z&sn=ItH6scUyCazNKHULKA0Yv6T+Skk4bdVmLqcPPPdWoxl2n1+rVbhKlplFrqjkoUFRr0og4wjeDz4yfThC82OjfQ==
В следующем примере демонстрируются предыдущие действия по созданию маркера доступа.
using System;
using System.Text;
using System.Globalization;
using System.Security.Cryptography;
public class Program
{
public static void Main()
{
var id = "53d7e14aee681a0034030003";
var key = "pXeTVcmdbU9XxH6fPcPlq8Y9D9G3Cdo5Eh2nMSgKj/DWqeSFFXDdmpz5Trv+L2hQNM+nGa704Rf8Z22W9O1jdQ==";
var expiry = DateTime.UtcNow.AddDays(10);
using (var encoder = new HMACSHA512(Encoding.UTF8.GetBytes(key)))
{
var dataToSign = id + "\n" + expiry.ToString("O", CultureInfo.InvariantCulture);
var hash = encoder.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));
var signature = Convert.ToBase64String(hash);
var encodedToken = string.Format("SharedAccessSignature uid={0}&ex={1:o}&sn={2}", id, expiry, signature);
Console.WriteLine(encodedToken);
}
}
}
Примечание
Оба формата маркеров SAS являются правильными и допустимыми:
SharedAccessSignature uid=53dd860e1b72ff0467030003&ex=2014-08-04T22:03:00.0000000Z&sn=ItH6scUyCazNKHULKA0Yv6T+Skk4bdVmLqcPPPdWoxl2n1+rVbhKlplFrqjkoUFRr0og4wjeDz4yfThC82OjfQ==
и
SharedAccessSignature integration&201808020500&aAsTE43MAbKMkZ6q83Z732IbzesfsaPEU404oUjQ4ZLE9iIXLz+Jj9rEctxKYw43SioCfdLaDq7dT8RQuBKc0w==
Полный пример кода см. в Управление API примере REST API для .NET.