Проверка подлинности с помощью пространств имен с помощью веб-токенов JSON
В этой статье показано, как пройти проверку подлинности с помощью пространства имен Сетка событий Azure с помощью веб-токенов JSON.
брокер MQTT Сетка событий Azure поддерживает пользовательскую проверку подлинности JWT, которая позволяет клиентам подключаться к пространству имен Сетки событий с помощью веб-маркеров JSON, выданных любым поставщиком удостоверений, помимо идентификатора Microsoft Entra ID.
Необходимые компоненты
Чтобы использовать настраиваемую проверку подлинности JWT для пространств имен, необходимо иметь следующие предварительные требования:
- Поставщик удостоверений, который может выдавать веб-маркеры Json.
- Сертификат ЦС, содержащий открытые ключи, используемые для проверки маркеров клиента.
- Учетная запись Azure Key Vault для размещения сертификата ЦС, включающего открытые ключи.
Пошаговые действия
Чтобы использовать пользовательскую проверку подлинности JWT для пространств имен, выполните следующие действия.
- Создайте пространство имен и настройте его подресурс.
- Включите управляемое удостоверение в пространстве имен Сетки событий.
- Создайте учетную запись Azure Key Vault, включающую сертификат ЦС, содержащий открытые ключи.
- Добавьте назначение ролей в Azure Key Vault для управляемого удостоверения пространства имен.
- Настройка пользовательских параметров проверки подлинности в пространстве имен Сетки событий
- Клиенты могут подключаться к пространству имен Сетки событий с помощью маркеров, предоставленных поставщиком удостоверений.
Создание пространства имен и настройка его подресурсов
Следуйте инструкциям из краткого руководства. Публикация и подписка на сообщения MQTT в пространстве имен сетки событий с помощью портал Azure для создания пространства имен и настройки его подресурсов. Пропустите шаги по созданию сертификата и клиента в качестве удостоверений клиента, поступающих из предоставленного маркера. Атрибуты клиента основаны на пользовательских утверждениях в маркере клиента. Атрибуты клиента используются в запросе группы клиентов, переменных шаблона раздела и конфигурации обогащения маршрутизации.
Включение управляемого удостоверения в пространстве имен Сетки событий
Пространство имен использует управляемое удостоверение для доступа к экземпляру Azure Key Vault, чтобы получить сертификат сервера для личного домена. Используйте следующую команду, чтобы включить управляемое удостоверение, назначаемое системой, в пространстве имен Сетки событий:
az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}"
Сведения о настройке системных и назначаемых пользователем удостоверений с помощью портал Azure см. в разделе "Включить управляемое удостоверение" для пространства имен Сетки событий.
Создание учетной записи Azure Key Vault и отправка сертификата сервера
Чтобы создать учетную запись Azure Key Vault, выполните следующую команду:
az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseuap"
Используйте следующую команду для импорта сертификата в Azure Key Vault
az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> "
Примечание.
Сертификат должен содержать доменное имя в альтернативном имени субъекта для DNS. Дополнительные сведения см. в статье Руководство по импорту сертификата в Azure Key Vault.
Добавление назначения ролей в Azure Key Vault для управляемого удостоверения пространства имен
Для доступа к учетной записи Azure Key Vault необходимо предоставить доступ к пространству имен, выполнив следующие действия.
Получение идентификатора субъекта-участника управляемого удостоверения в службе "Сетка событий" с помощью следующей команды
$principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv)
Получите идентификатор ресурса Хранилища ключей Azure.
$keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv)
Добавьте назначение ролей в Key Vault для управляемого удостоверения пространства имен.
az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId
Дополнительные сведения о доступе к Key Vault и интерфейсе портала см. в статье "Предоставление доступа к ключам, сертификатам и секретам Key Vault с помощью управления доступом на основе ролей Azure".
Настройка пользовательских параметров проверки подлинности в пространстве имен Сетки событий
На этом шаге вы настраиваете параметры проверки подлинности в пространстве имен Сетки событий с помощью портал Azure и Azure CLI. Сначала необходимо создать пространство имен, а затем обновить его, выполнив следующие действия.
Использование портала Azure
Перейдите к пространству имен Сетки событий в портал Azure.
На странице пространства имен сетки событий выберите "Конфигурация" в меню слева.
В разделе пользовательской проверки подлинности JWT укажите значения для следующих свойств:
Выберите Включить настраиваемую проверку подлинности JWT.
Издатель токенов: введите значение утверждений издателя маркеров JWT, представленных клиентами MQTT.
Выбор сертификата издателя
На новой странице укажите значения для следующих свойств.
URL-адрес сертификата: идентификатор сертификата издателя в созданном хранилище ключей Azure. Вместо этого можно выбрать сертификат с помощью хранилища ключей, чтобы выбрать сертификат и хранилище ключей из подписок.
Удостоверение: удостоверение, используемое для проверки подлинности в Key Vault для доступа к созданному сертификату издателя.
Выберите Добавить.
Вернитесь на страницу "Конфигурация" и нажмите кнопку "Применить".
Примечание.
Вы можете добавить до двух
iss
сертификатов для целей смены сертификатов и ключей.
Использование Azure CLI
Используйте следующую команду, чтобы обновить пространство имен с помощью настраиваемой конфигурации проверки подлинности JWT.
az resource update --resource-type Microsoft.EventGrid/namespaces --api-version 2024-06-01-preview --ids /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dummy-cd-test/providers/Microsoft.EventGrid/namespaces/dummy-cd-test2 --set properties.topicSpacesConfiguration.clientAuthentication='{\"customJwtAuthentication\":{\"tokenIssuer\":\"dmpypin-issuer\",\"issuerCertificates\":[{\"certificateUrl\":\"https://dummyCert-cd-test.vault.azure.net/certificates/dummy-cd-test/4f844b284afd487e9bba0831191087br1\",\"identity\":{\"type\":\"SystemAssigned\"}}]}}'
Формат веб-маркера JSON
Веб-маркеры JSON разделены на разделы заголовка JWT и полезных данных JWT.
Заголовок JWT
Заголовок должен содержать по крайней мере typ
и alg
поля. typ
всегда должен быть и alg
всегда должен бытьRS256
JWS
. Заголовок токена должен быть следующим:
{
"typ": "JWT",
"alg": "RS256"
}
Полезные данные JWT
Для сетки событий требуются следующие утверждения: iss
, sub
, aud
, exp
. nbf
Имя | Описание |
---|---|
iss |
Издатель. Значение в JWT должно соответствовать издателю в конфигурации пространства имен сетки событий для пользовательской проверки подлинности JWT. |
sub |
Тема. Значение используется в качестве имени удостоверения проверки подлинности. |
aud |
Аудитория. Значение может быть строкой или массивом строк. Значение должно содержать стандартное имя узла пространства имен сетки событий и (или) личный домен для этого пространства имен Сетки событий (если настроено). Аудитория может содержать другие строки, но для этого пространства имен требуется хотя бы одна из этих строк. |
exp |
Expiration Время unix, когда срок действия JWT истекает. |
nbf |
Не раньше. Время единицы, когда JWT становится допустимым. |
Сетка событий сопоставляет все утверждения с атрибутами клиента, если они имеют один из следующих типов: int32
, string
, array of strings
. Стандартные утверждения iss
, , sub
, nbf
aud
exp
исключаются из атрибутов клиента. В следующем примере JWT только три утверждения преобразуются в клиентские атрибуты, num_attr
, str_list_attr
str_attr
так как они имеют правильные типы int32
, string
. array of strings
incorrect_attr_1
, incorrect_attr_2
не преобразуется в атрибуты клиента, так как они имеют неправильные типы: float
, array of integers
, object
incorrect_attr_3
.
{
"iss": "correct_issuer",
"sub": "d1",
"aud": "testns.mqtt-broker-int.azure.net",
"exp": 1712876224,
"nbf": 1712869024,
"num_attr": 1,
"str_attr": "some string",
"str_list_attr": [
"string 1",
"string 2"
],
"incorrect_attr_1": 1.23,
"incorrect_attr_2": [
1,
2,
3
],
"incorrect_attr_3": {
"field": "value"
}
}