Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как аутентифицироваться в пространствах имен Сетка событий Azure с помощью веб-перехватчика или функции Azure.
Авторизация веб-перехватчика позволяет внешним HTTP конечным точкам (веб-перехватчикам или функциям) динамически проверять подлинность подключений транспорта телеметрии сообщений (MQTT). Этот метод использует проверку удостоверения JSON Web Token Microsoft Entra ID для обеспечения безопасного доступа.
Когда клиент пытается подключиться, брокер вызывает определяемую пользователем конечную точку HTTP, которая проверяет учетные данные, такие как маркеры подписанного URL-адреса, имена пользователей и пароли, или даже выполняет проверки списка отзыва сертификатов. Веб-перехватчик оценивает запрос и возвращает решение разрешить или запретить подключение, а также необязательные метаданные для детальной авторизации. Этот подход поддерживает гибкие и централизованные политики проверки подлинности в различных парках устройств и вариантах использования.
Предпосылки
- Пространство имен Event Grid с управляемым удостоверением, которое может быть назначено системой или пользователем.
- Внешний веб-перехватчик или функция Azure.
- Доступ предоставляется управляемой сущности пространства имен Event Grid к функции Azure или веб-хуку.
Высокоуровневые шаги
Чтобы использовать настраиваемую аутентификацию для веб-хуков в пространствах имен, выполните следующие действия.
- Создайте пространство имен и настройте его подресурсы.
- Включите управляемое удостоверение в пространстве имен Event Grid.
- Предоставьте управляемому удостоверению доступ к функциям Azure или веб-хуку.
- Настройте параметры веб-перехватчика в пространстве имен Event Grid.
- Подключите клиентов к пространству имен Event Grid и получите аутентификацию через веб-перехватчик или функцию.
Создайте пространство имён и настройте его подресурсы
Чтобы создать пространство имен и настроить его подресурсы, следуйте инструкциям в кратком руководстве: Публикация и подписка на сообщения MQTT в пространстве имен Сетки событий с помощью портала Azure. Пропустите шаги по созданию сертификата и клиента, так как удостоверения клиента приходят из предоставленного токена. Атрибуты клиента основаны на пользовательских утверждениях в токене клиента. Атрибуты клиента используются в запросе группы клиентов, переменных шаблонов тематики и конфигурации обогащения маршрутизации.
Включение управляемого удостоверения в неймспейсе Event Grid
Чтобы активировать системно назначаемую управляемую идентичность в пространстве имен Event Grid, используйте следующую команду:
az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}"
Сведения о том, как настроить управляемые идентификаторы, назначенные системой и пользователем, с помощью портала Azure, см. в статье "Включение управляемого идентификатора для пространства имен Event Grid".
Реализации
Вариант 1. Реализация веб-перехватчика с помощью функций Azure (приложение Microsoft Entra)
Функции Azure способен размещать логику веб-хука с помощью Microsoft.Identity.Web для автоматической проверки токена. Для проверки токенов вызывающего объекта Event Grid требуется регистрация приложения Microsoft Entra для API веб-перехватчика. Регистрация приложения имеет URI идентификатора приложения для выпуска токенов. Клиентская часть (Event Grid) уже имеет управляемое удостоверение.
Преимущества.
- Нет инфраструктуры для управления
- Встроенные вспомогательные средства проверки подлинности (
Microsoft.Identity.Web) - Устойчивый, масштабируемый, экономичный
Функция должна выполнять следующие операции:
- Проверьте токен вызывающего объекта из управляемой идентификации Event Grid.
- Проверьте веб-токен JSON клиента (JWT).
- Верните JSON-ответ с разрешением или запретом.
Вариант 2. Реализация внешней конечной точки HTTPS
Эта реализация может быть любой внешней конечной точкой HTTPS (любой облачной, любой серверной частью), с использованием проверки Microsoft Entra ID JWT с помощью библиотек Microsoft.IdentityModel.
Используйте любую среду выполнения: .NET, Node.js, Java или Python.
Ключевые требования:
Конечная точка должна быть HTTPS.
Он должен проверить токен JWT вызывающей стороны.
Он должен проверить JWT устройства.
Он должен реагировать в течение времени ожидания (рекомендуется примерно 5 секунд).
Предоставьте управляемому удостоверению соответствующий доступ к функции или веб-перехватчику.
Предоставьте управляемому идентификатору пространства имен Event Grid соответствующий доступ к целевой функции Azure или веб-хуку.
Чтобы настроить настраиваемую проверку подлинности для функции Azure, выполните следующие действия.
Создание приложения Microsoft Entra
Создайте приложение Microsoft Entra в идентификаторе Microsoft Entra.
На странице обзора приложения запишите значение идентификатора приложения (клиента ).
В меню слева выберите "Предоставить API". Рядом с URI идентификатора приложения нажмите кнопку "Добавить".
Запишите значение URI идентификатора приложения на панели "Изменить URI идентификатора приложения" и нажмите кнопку "Сохранить".
Настройка проверки подлинности для функции Azure
Если у вас есть базовая функция Azure, созданная на портале Azure, настройте проверку подлинности и проверьте маркер идентификатора Microsoft Entra, созданный с помощью управляемого удостоверения.
Перейдите в приложение "Функции Azure".
В меню слева выберите "Проверка подлинности" и выберите "Добавить поставщика удостоверений".
На странице "Добавление поставщика удостоверений" для поставщика удостоверений выберите Майкрософт из раскрывающегося списка.
В разделе регистрации приложения укажите значения для следующих свойств:
В разделе "Разрешенные аудитории маркера" введите допустимые аудитории маркеров. Чтобы быть конкретным, введите URI идентификатора приложения Microsoft Entra, которое вы указали ранее. Аудитория токенов используется для проверки входящего токена из Event Grid.
В разделе "Дополнительные проверки " выполните следующие действия.
В разделе параметров проверки подлинности службы приложений выполните следующие действия.
Выберите другие параметры в зависимости от ваших требований, а затем нажмите кнопку "Добавить".
Создание и использование токена идентификатора Microsoft Entra
Теперь создайте и используйте маркер идентификатора Microsoft Entra.
- Создайте токен Microsoft Entra ID с помощью управляемого удостоверения с URI идентификатора приложения (
api://<ClientID>) как ресурс. - Используйте этот маркер для вызова функции Azure, включив ее в заголовок запроса.
Настройка пользовательских параметров проверки подлинности вебхука в пространстве имен Event Grid
Настройте настраиваемые параметры аутентификации веб-перехватчика в вашем пространстве имен Event Grid, используя портал Azure и Azure CLI. Сначала вы создаете пространство имен, а затем обновляете его.
Использование портала Azure
Перейдите в пространство имен Event Grid на портале Azure.
На странице Event Grid Namespace выберите Конфигурация в левом меню.
В разделе настройки аутентификации пользовательского вебхука укажите значения для следующих свойств:
- Тип управляемого удостоверения: выберите назначенное пользователем.
- URL-адрес веб-перехватчика: Введите значение URL конечной точки, на которую служба Event Grid отправляет аутентифицированные запросы веб-перехватчика, используя указанную управляемую идентичность.
- URI аудитории токенов: введите значение идентификатора приложения Microsoft Entra или URI, чтобы получить маркер доступа, который будет включен в качестве маркера носителя в запросах на доставку.
- Идентификатор арендатора Microsoft Entra ID: введите значение идентификатора арендатора Microsoft Entra, используемого для получения токена для проверки подлинности доставки веб-хука.
Нажмите кнопку "Применить".
Использование командной строки Azure CLI
Чтобы обновить пространство имен с помощью настраиваемой конфигурации проверки подлинности веб-хука, выполните следующую команду:
az eventgrid namespace update \
--resource-group <resource-group-name> \
--name <namespace-name> \
--api-version 2025-04-01-preview \
--identity-type UserAssigned \
--identity-user-assigned-identities "/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX={}" \
--set properties.isZoneRedundant=true \
properties.topicSpacesConfiguration.state=Enabled \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.type=UserAssigned \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.userAssignedIdentity="/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX" \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.endpointUrl="https://XXXXXXXXXXX" \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryApplicationIdOrUri="api://XXXXXXXXXXX/.default" \
properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryTenantId="XXXXXXXXXXX"
Замените <NAMESPACE_NAME> и <RESOURCE_GROUP_NAME> на фактические значения. Заполните заполнители в подписке, группе ресурсов, удостоверении, идентификаторе приложения, URL-адресе и идентификаторе клиента. Чтобы повысить производительность и надежность аутентификации на основе вебхука для брокера MQTT Event Grid, рекомендуется включить поддержку HTTP/2 для конечной точки вебхука.
Сведения об API вебхука
Заголовки запросов
Служба "Сетка событий Azure" отправляет следующие заголовки в запрос на веб-перехватчик:
Authorization: Bearer <token>
Токен — это токен Microsoft Entra для управляемой идентичности, настроенной для вызова веб-перехватчика.
Тело запроса
{
"clientId": "<string>",
"userName": "<string>",
"password": "<base64 encoded bytes>",
"authenticationMethod": "<string>",
"authenticationData": "<base64 encoded bytes>",
"clientCertificate": "<certificate in PEM format>",
"clientCertificateChain": "<certificates from chain in PEM format>"
}
Описания полей полезных данных
| Поле | Обязательный или необязательный | Описание |
|---|---|---|
clientId |
Обязательно | Идентификатор клиента из пакета MQTT CONNECT. |
userName |
Необязательно | Имя пользователя из пакета MQTT CONNECT. |
password |
Необязательно | Пароль из пакета MQTT CONNECT в кодировке Base64. |
authenticationMethod |
Необязательно | Метод проверки подлинности из пакета MQTT CONNECT (только MQTT5). |
authenticationData |
Необязательно | Данные проверки подлинности из пакета MQTT CONNECT в кодировке Base64 (только MQTT5). |
clientCertificate |
Необязательно | Сертификат клиента в формате Privacy-Enhanced Mail (PEM). |
clientCertificateChain |
Необязательно | Другие сертификаты, предоставляемые клиентом, необходимые для создания цепочки из сертификата клиента в сертификат центра сертификации. |
Полезная нагрузка ответа
Успешный ответ
HTTP/1.1 200 OK
Content-Type: application/json
{
"decision": "allow",
"clientAuthenticationName": "<string>",
"attributes": {
"attr": "<int/string/array_of_strings>",
...
},
"expiration": "<unix time format>"
}
Отклоненный ответ
HTTP/1.1 200 OK
Content-Type: application/json
{
"decision": "deny",
"errorReason": "<string>"
}
Коды ошибок:
| Результат проверки подлинности | Ответ функции | Код причины сетки событий MQTT |
|---|---|---|
| Явный отказ в авторизации | "decision": "deny" |
Не авторизовано |
| Недопустимый или истекший токен | "decision": "deny" |
Не авторизовано |
| Время ожидания функции | N/A | Сервер недоступен |
| Исключение функции или сбой | N/A | Сервер недоступен |
| Временный сбой платформы | N/A | Сервер недоступен |
| Внутренняя ошибка процессинга брокера | N/A | Сервер недоступен |
Описания полей ответа
| Поле | Тип | Обязательный при необходимости | Описание |
|---|---|---|---|
decision |
string (allow | deny) |
Всегда требуется | Решение проверки подлинности, возвращаемое службой. Допустимые значения: allow или deny. |
clientAuthenticationName |
струна | Обязательный, если decision = allow |
Имя идентификатора клиента (например, идентификатор устройства или идентификатор клиента). |
attributes |
Объект (словарь) | Необязательный, если decision = allow |
Пары ключ-значение, описывающие дополнительные атрибуты. Значения могут быть int, string или массив строк. |
expiration |
целое число (метка времени Unix, секунды) | Необязательный, если decision = allow |
Время истечения срока действия решения авторизации, выраженное как время Unix (секунды с эпохи). Пример: 1713782400. |
errorReason |
струна | Необязательный, если decision = deny |
Сообщение об ошибке, описывающее, почему запрос был отклонен. Это значение регистрируется для диагностики. |
Примеры поддерживаемых типов атрибутов
"num_attr_pos": 1,
"num_attr_neg": -1,
"str_attr": "str_value",
"str_list_attr": [
"str_value_1",
"str_value_2"
]
Все правильные типы данных (число, подходящее <int32/string/array_of_strings>) используются в качестве атрибутов. В примере утверждения num_attr_pos, num_attr_neg, str_attr и str_list_attr имеют правильные типы данных и используются в качестве атрибутов.