Проверка подлинности клиентов публикации службы "Сетка событий Azure" с помощью ключей доступа или подписанных URL-адресов
Эта статья содержит сведения об аутентификации клиентов, публикующих события в разделах, доменах или партнерских пространствах имен службы "Сетка событий Azure" с помощью ключа доступа или маркера подписанного URL-адреса (SAS).
Важно!
- Проверка подлинности и авторизация пользователей или приложений с помощью удостоверений Microsoft Entra обеспечивает более высокую безопасность и удобство использования при проверке подлинности на основе ключей и подписанных URL-адресов (SAS). При использовании идентификатора Microsoft Entra не требуется хранить секреты, используемые для проверки подлинности в коде и потенциальных уязвимостях безопасности. Настоятельно рекомендуется использовать идентификатор Microsoft Entra с приложениями публикации событий Сетка событий Azure. Дополнительные сведения см. в разделе "Проверка подлинности клиентов публикации с помощью идентификатора Microsoft Entra".
- Проверка подлинности Microsoft Entra не поддерживается для разделов пространства имен.
Аутентификация с использованием ключа доступа
Аутентификация с использованием ключа доступа — самая простая форма аутентификации. Ключ доступа можно передать в качестве заголовка HTTP или параметра запроса URL-адреса.
Ключ доступа в заголовке HTTP
Передайте ключ доступа в качестве значения для заголовка HTTP: aeg-sas-key
.
aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Ключ доступа в качестве параметра запроса
Можно также указать aeg-sas-key
в качестве параметра запроса.
https://<yourtopic>.<region>.eventgrid.azure.net/api/events?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Инструкции по получению ключей доступа для раздела или домена см. в статье Получение ключей доступа.
Проверка подлинности с помощью подписанного URL-адреса
Маркеры SAS для ресурса Сетки событий включают ресурс, время окончания срока его действия и подпись. Маркер SAS имеет следующий формат: r={resource}&e={expiration}&s={signature}
.
Ресурс — это путь к разделу "Сетка событий", в который вы отправляете события. Вот пример допустимого пути к ресурсу: https://<yourtopic>.<region>.eventgrid.azure.net/api/events
. Сведения о поддерживаемых версиях API см. в статье Типы ресурсов Microsoft.EventGrid.
Сначала программно создайте маркер SAS, а затем используйте заголовок aeg-sas-token
или заголовок Authorization SharedAccessSignature
для аутентификации с помощью Сетки событий.
Программное создание маркера SAS
В следующем примере создается маркер SAS для использования с сеткой событий:
static string BuildSharedAccessSignature(string resource, DateTime expirationUtc, string key)
{
const char Resource = 'r';
const char Expiration = 'e';
const char Signature = 's';
string encodedResource = HttpUtility.UrlEncode(resource);
var culture = CultureInfo.CreateSpecificCulture("en-US");
var encodedExpirationUtc = HttpUtility.UrlEncode(expirationUtc.ToString(culture));
string unsignedSas = $"{Resource}={encodedResource}&{Expiration}={encodedExpirationUtc}";
using (var hmac = new HMACSHA256(Convert.FromBase64String(key)))
{
string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(unsignedSas)));
string encodedSignature = HttpUtility.UrlEncode(signature);
string signedSas = $"{unsignedSas}&{Signature}={encodedSignature}";
return signedSas;
}
}
def generate_sas_token(uri, key, expiry=3600):
ttl = datetime.datetime.utcnow() + datetime.timedelta(seconds=expiry)
encoded_resource = urllib.parse.quote_plus(uri)
encoded_expiration_utc = urllib.parse.quote_plus(ttl.isoformat())
unsigned_sas = f'r={encoded_resource}&e={encoded_expiration_utc}'
signature = b64encode(HMAC(b64decode(key), unsigned_sas.encode('utf-8'), sha256).digest())
encoded_signature = urllib.parse.quote_plus(signature)
token = f'r={encoded_resource}&e={encoded_expiration_utc}&s={encoded_signature}'
return token
С использованием заголовка aeg-sas-token
Ниже приведен пример передачи маркера SAS в качестве значения для заголовка aeg-sas-token
.
aeg-sas-token: r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d
С использованием заголовка авторизации
Ниже приведен пример передачи маркера SAS в качестве значения для заголовка Authorization
.
Authorization: SharedAccessSignature r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d
Следующие шаги
Сведения об аутентификации с помощью обработчиков событий для доставки событий см. в статье Аутентификация доставки событий.