Бөлісу құралы:


Проверка подлинности с помощью пространств имен с помощью веб-токенов JSON

В этой статье показано, как пройти проверку подлинности с помощью пространства имен Сетка событий Azure с помощью веб-токенов JSON.

брокер MQTT Сетка событий Azure поддерживает пользовательскую проверку подлинности JWT, которая позволяет клиентам подключаться к пространству имен Сетки событий с помощью веб-маркеров JSON, выданных любым поставщиком удостоверений, помимо идентификатора Microsoft Entra ID.

Необходимые компоненты

Чтобы использовать настраиваемую проверку подлинности JWT для пространств имен, необходимо иметь следующие предварительные требования:

  • Поставщик удостоверений, который может выдавать веб-маркеры Json.
  • Сертификат ЦС, содержащий открытые ключи, используемые для проверки маркеров клиента.
  • Учетная запись Azure Key Vault для размещения сертификата ЦС, включающего открытые ключи.

Пошаговые действия

Чтобы использовать пользовательскую проверку подлинности JWT для пространств имен, выполните следующие действия.

  1. Создайте пространство имен и настройте его подресурс.
  2. Включите управляемое удостоверение в пространстве имен Сетки событий.
  3. Создайте учетную запись Azure Key Vault, включающую сертификат ЦС, содержащий открытые ключи.
  4. Добавьте назначение ролей в Azure Key Vault для управляемого удостоверения пространства имен.
  5. Настройка пользовательских параметров проверки подлинности в пространстве имен Сетки событий
  6. Клиенты могут подключаться к пространству имен Сетки событий с помощью маркеров, предоставленных поставщиком удостоверений.

Создание пространства имен и настройка его подресурсов

Следуйте инструкциям из краткого руководства. Публикация и подписка на сообщения MQTT в пространстве имен сетки событий с помощью портал Azure для создания пространства имен и настройки его подресурсов. Пропустите шаги по созданию сертификата и клиента в качестве удостоверений клиента, поступающих из предоставленного маркера. Атрибуты клиента основаны на пользовательских утверждениях в маркере клиента. Атрибуты клиента используются в запросе группы клиентов, переменных шаблона раздела и конфигурации обогащения маршрутизации.

Включение управляемого удостоверения в пространстве имен Сетки событий

Пространство имен использует управляемое удостоверение для доступа к экземпляру Azure Key Vault, чтобы получить сертификат сервера для личного домена. Используйте следующую команду, чтобы включить управляемое удостоверение, назначаемое системой, в пространстве имен Сетки событий:

az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}" 

Сведения о настройке системных и назначаемых пользователем удостоверений с помощью портал Azure см. в разделе "Включить управляемое удостоверение" для пространства имен Сетки событий.

Создание учетной записи Azure Key Vault и отправка сертификата сервера

  1. Чтобы создать учетную запись Azure Key Vault, выполните следующую команду:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  2. Используйте следующую команду для импорта сертификата в 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 необходимо предоставить доступ к пространству имен, выполнив следующие действия.

  1. Получение идентификатора субъекта-участника управляемого удостоверения в службе "Сетка событий" с помощью следующей команды

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Получите идентификатор ресурса Хранилища ключей Azure.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Добавьте назначение ролей в Key Vault для управляемого удостоверения пространства имен.

    az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId 
    

    Дополнительные сведения о доступе к Key Vault и интерфейсе портала см. в статье "Предоставление доступа к ключам, сертификатам и секретам Key Vault с помощью управления доступом на основе ролей Azure".

Настройка пользовательских параметров проверки подлинности в пространстве имен Сетки событий

На этом шаге вы настраиваете параметры проверки подлинности в пространстве имен Сетки событий с помощью портал Azure и Azure CLI. Сначала необходимо создать пространство имен, а затем обновить его, выполнив следующие действия.

Использование портала Azure

  1. Перейдите к пространству имен Сетки событий в портал Azure.

  2. На странице пространства имен сетки событий выберите "Конфигурация" в меню слева.

  3. В разделе пользовательской проверки подлинности JWT укажите значения для следующих свойств:

    1. Выберите Включить настраиваемую проверку подлинности JWT.

    2. Издатель токенов: введите значение утверждений издателя маркеров JWT, представленных клиентами MQTT.

    3. Выбор сертификата издателя

      Снимок экрана: раздел пользовательской проверки подлинности JWT на странице

    4. На новой странице укажите значения для следующих свойств.

      1. URL-адрес сертификата: идентификатор сертификата издателя в созданном хранилище ключей Azure. Вместо этого можно выбрать сертификат с помощью хранилища ключей, чтобы выбрать сертификат и хранилище ключей из подписок.

      2. Удостоверение: удостоверение, используемое для проверки подлинности в Key Vault для доступа к созданному сертификату издателя.

      3. Выберите Добавить.

        Снимок экрана: страница

  4. Вернитесь на страницу "Конфигурация" и нажмите кнопку "Применить".

    Примечание.

    Вы можете добавить до двух iss сертификатов для целей смены сертификатов и ключей.

Использование Azure CLI

Используйте следующую команду, чтобы обновить пространство имен с помощью настраиваемой конфигурации проверки подлинности JWT.

az resource update --resource-type Microsoft.EventGrid/namespaces --api-version 2024-06-01-preview --ids /subscriptions/69f9e5ac-ca07-42cc-98d2-4718d033bcc5/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 всегда должен бытьRS256JWS. Заголовок токена должен быть следующим:

{
    "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 audexpисключаются из атрибутов клиента. В следующем примере JWT только три утверждения преобразуются в клиентские атрибуты, num_attr, str_list_attrstr_attrтак как они имеют правильные типы int32, string. array of stringsincorrect_attr_1, incorrect_attr_2не преобразуется в атрибуты клиента, так как они имеют неправильные типы: float, array of integers, objectincorrect_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"
    }
}