Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье предлагаем информацию об аутентификации клиентов для тем, настраиваемых тем, доменов и партнерских пространств имен Azure Event Grid, используя ключ доступа или маркера Shared Access Signature (SAS).
Внимание
- Аутентификация и авторизация пользователей или приложений с использованием удостоверений Microsoft Entra обеспечивает более высокую безопасность и удобство использования по сравнению с аутентификацией на основе ключей и с использованием подписей для предоставления общего доступа (SAS). При использовании Microsoft Entra ID вам не нужно хранить секреты, используемые для аутентификации, в коде и подвергать себя потенциальным уязвимостям безопасности. Настоятельно рекомендуется использовать Microsoft Entra ID с вашими приложениями.
Аутентификация с использованием ключа доступа
Аутентификация с использованием ключа доступа — самая простая форма аутентификации. Ключ доступа можно передать в качестве заголовка HTTP или параметра запроса URL-адреса.
Ключ доступа в заголовке HTTP
Передайте ключ доступа в качестве значения для заголовка HTTP: aeg-sas-key.
aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Ключ доступа в качестве параметра запроса
Можно также указать aeg-sas-key в качестве параметра запроса.
Например, для тем пространства имен это тот способ, которым ваш URL-адрес HTTP-запроса может выглядеть, передавая ключ в качестве параметра.
https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>:publish?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Для пользовательских разделов, доменов и пространств имен партнеров URL-адрес HTTP-запроса должен выглядеть следующим образом:
https://<yourtopic>.<region>.eventgrid.azure.net/api/events?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==
Подписанные разрешения на доступ
Подписанные строки доступа (SAS) предоставляют вам возможность контроля над доступом к ресурсам, с которыми могут взаимодействовать клиенты. Вот некоторые элементы управления, которые можно настроить в SAS.
- Задайте время истечения срока действия SAS. Это значение эффективно определяет интервал, в течение которого SAS можно использовать для аутентификации.
- Ресурс, для которого можно использовать SAS. Маркер SAS можно создавать для доступа к пользовательским темам, доменам, пространствам имен партнера и общим пространствам имен. При создании SAS для пользовательского раздела, домена или пространства имен партнера клиент может использовать его для публикации событий в любом из этих ресурсов. При создании SAS для ресурсов пространства имен у вас есть детальный контроль над доступом клиента. Если вы создаете SAS, ресурс которого является пространством имен, клиент может публиковать события в любом разделе пространства имен внутри пространства имен и получать события из любой подписки на события в любой из тем пространства имен. Аналогичным образом при создании SAS для раздела пространства имен клиент может публиковать события в этом разделе пространства имен и получать события из любой подписки на события в этом разделе. При создании SAS для подписки на события, клиент может получать события через именно эту подписку на события.
- Только клиенты, которые представляют допустимый SAS, могут отправлять или получать данные в сетку событий.
Токен общего доступа (Shared Access Signature)
Вы можете создать маркер SAS для включения, когда ваше клиентское приложение взаимодействует с Event Grid. Маркеры SAS для ресурсов сетки событий кодируются URL в следующем формате: r={resource}&e={expiration_utc}&s={signature}
-
{resource}— это URL-адрес, представляющий ресурс сетки событий, к которому обращается клиент.- Допустимый формат URL-адреса для пользовательских тем, разделов, доменов и пространств имен партнеров
https://<yourtopic>.<region>.eventgrid.azure.net/api/events. - Допустимый формат ресурсов пространства имен выглядит следующим образом:
- Пространства имен:
https://<namespace-name>.<region>.eventgrid.azure.net - Темы пространства имен:
https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name> - Подписки на события:
https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>/eventsubscriptions/<event_subscription_name>
- Пространства имен:
- Допустимый формат URL-адреса для пользовательских тем, разделов, доменов и пространств имен партнеров
-
{expiration_utc}— закодированное в URL время истечения срока действия SAS в формате UTC. -
{signature}— это хэш SHA-256, вычисляемый по URI ресурса и строковое представление истечения срока действия маркера, разделенное CRLF. Вычисление хэша напоминает следующий псевдокод и возвращает 256-битное (32-байтное) значение хэша.
SHA-256('https://<namespace_name>.eventgrid.azure.net/'+'\n'+ 1438205742)
Маркер содержит не хэшированные значения, чтобы получатель (сетка событий) перекомпилировал хэш с теми же параметрами, проверяя, что маркер не был изменен (целостность данных).
Маркер SAS действителен для всех ресурсов, префиксированных с помощью URI ресурса, используемого в строке подписи.
Чтобы ознакомиться со всеми поддерживаемыми версиями API при использовании Event Grid, см. сведения о типах ресурсов Microsoft.EventGrid.
Аутентификация с использованием SAS
Приложение может аутентифицироваться перед ресурсом Event Grid, предоставив токен SAS. Это можно сделать с помощью заголовка aeg-sas-token или Authorization SharedAccessSignature заголовка с HTTP-запросом. В следующих разделах описывается способ создания токена SAS и его использования, когда клиентское приложение выполняет HTTP-запросы для отправки или получения (доставки по запросу) событий.
Программное создание маркера SAS
В следующих примерах C# и Python показано, как создать маркер SAS для использования с сеткой событий:
Пример C#
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;
}
}
Пример Python
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