Поделиться через


Начало работы с управлением устройствами

Серверные приложения могут использовать примитивы Центра Интернета вещей Azure, такие как двойники устройств и прямые методы, для удаленного запуска и мониторинга действий управления устройствами.

Используйте прямой метод из серверной программы для запуска действий управления устройствами, таких как перезагрузка, сброс до заводских настроек и обновление прошивки.

Устройство отвечает за следующие действия:

  • Handling the direct method request sent from IoT Hub
  • Запуск соответствующего действия для конкретного устройства
  • Providing status updates through reported properties to IoT Hub

В этой статье показано, как серверное приложение и приложение устройства могут работать вместе, чтобы инициировать и отслеживать действие удаленного устройства с помощью прямого метода.

  • A service app calls a direct method to reboot in a device app through an IoT hub.
  • Приложение устройства обрабатывает прямой метод перезагрузки устройства.

Примечание.

Функции, описанные в этой статье, доступны только на стандартном уровне Центра Интернета вещей. Дополнительные сведения о базовых и стандартных и бесплатных уровнях Центра Интернета вещей см. в разделе Выберите нужный уровень и размер Центра Интернета вещей для вашего решения.

Примечание.

Эта статья предназначена для дополнения примеров пакетов SDK Для Интернета вещей Azure, на которые ссылается эта статья. Средства SDK можно использовать для создания приложений устройств и внутренних приложений.

Необходимые условия

  • Центр Интернета вещей.

  • Зарегистрированное устройство

  • Если приложение использует протокол MQTT, убедитесь, что порт 8883 открыт в брандмауэре. Протокол MQTT взаимодействует через порт 8883. В некоторых корпоративных и академических сетях этот порт может быть заблокирован. Дополнительные сведения и способы устранения этой проблемы см. в разделе о подключении к Центру Интернета вещей по протоколу MQTT.

  • Требуется Visual Studio

Обзор

В этой статье описывается, как использовать Azure IoT SDK для .NET для создания кода приложения устройств и кода серверной службы для прямых сообщений с устройствами.

Создание приложения устройства

Этот раздел описывает, как использовать код приложения устройства для создания прослушивателя обратного вызова метода.

Обязательные пакеты NuGet для устройства

Клиентские приложения устройств, написанные на C#, требуют пакета NuGet Microsoft.Azure.Devices.Client .

Add these using statements to use the device library.

using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;

Подключение устройства к Центру Интернета вещей

Приложение устройства может пройти проверку подлинности в IoT Hub с помощью следующих методов:

  • Общий ключ доступа
  • Сертификат X.509

Внимание

В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.

Проверка подлинности с помощью общего ключа доступа

Класс DeviceClient предоставляет все методы, необходимые для взаимодействия с сообщениями устройства с устройства.

Подключитесь к устройству, используя метод CreateFromConnectionString со строкой подключения устройства и транспортным протоколом подключения.

Параметр CreateFromConnectionStringтранспортного протокола TransportType поддерживает следующие транспортные протоколы:

  • Mqtt
  • Mqtt_WebSocket_Only
  • Mqtt_Tcp_Only
  • Amqp
  • Amqp_WebSocket_Only
  • Amqp_Tcp_Only
  • Http1

Этот пример подключается к устройству с использованием транспортного протокола Mqtt.

static string DeviceConnectionString = "{IoT hub device connection string}";
static deviceClient = null;
deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString, 
   TransportType.Mqtt);

Проверка подлинности с помощью сертификата X.509

Чтобы подключить устройство к IoT Hub с помощью сертификата X.509:

  1. Используйте DeviceAuthenticationWithX509Certificate для создания объекта, содержащего сведения об устройстве и сертификате. DeviceAuthenticationWithX509Certificate передается в качестве второго параметра DeviceClient.Create (шаг 2).

  2. Используйте DeviceClient.Create для подключения устройства к Центр Интернета вещей с помощью сертификата X.509.

В этом примере сведения об устройстве и сертификате заполняются в объекте authDeviceAuthenticationWithX509Certificate , передаваемом в DeviceClient.Create.

В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте Environment.GetEnvironmentVariable("HOSTNAME") для чтения переменной среды имени узла.

RootCertPath = "~/certificates/certs/sensor-thl-001-device.cert.pem";
Intermediate1CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate1.cert.pem";
Intermediate2CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate2.cert.pem";
DevicePfxPath = "~/certificates/certs/sensor-thl-001-device.cert.pfx";
DevicePfxPassword = "1234";
DeviceName = "MyDevice";
HostName = "xxxxx.azure-devices.net";

var chainCerts = new X509Certificate2Collection();
chainCerts.Add(new X509Certificate2(RootCertPath));
chainCerts.Add(new X509Certificate2(Intermediate1CertPath));
chainCerts.Add(new X509Certificate2(Intermediate2CertPath));
using var deviceCert = new X509Certificate2(DevicePfxPath, DevicePfxPassword);
using var auth = new DeviceAuthenticationWithX509Certificate(DeviceName, deviceCert, chainCerts);

using var deviceClient = DeviceClient.Create(
    HostName,
    auth,
    TransportType.Amqp);

Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:

Примеры кода

For working samples of device X.509 certificate authentication, see:

Create a direct method callback listener

Use SetMethodHandlerAsync to initialize a direct method callback listener. Слушатель связан с ключевым словом метода, например "перезагрузка". Имя метода можно использовать в Концентраторе Интернета вещей или в серверном приложении для активации метода обратного вызова на устройстве.

This example sets up a callback listener named onReboot that will trigger when the "reboot" direct method name is called.

try
{
      // setup callback for "reboot" method
      deviceClient.SetMethodHandlerAsync("reboot", onReboot, null).Wait();
      Console.WriteLine("Waiting for reboot method\n Press enter to exit.");
      Console.ReadLine();

      Console.WriteLine("Exiting...");

      // as a good practice, remove the "reboot" handler
      deviceClient.SetMethodHandlerAsync("reboot", null, null).Wait();
      deviceClient.CloseAsync().Wait();
}
catch (Exception ex)
{
      Console.WriteLine();
      Console.WriteLine("Error in sample: {0}", ex.Message);
}

Continuing the example, the onReboot callback method implements the direct method on the device.

Функция обработчика вызывает MethodResponse для отправки подтверждения ответа в вызывающее приложение.

static Task<MethodResponse> onReboot(MethodRequest methodRequest, object userContext)
{
      // In a production device, you would trigger a reboot 
      // scheduled to start after this method returns.
      // For this sample, we simulate the reboot by writing to the console
      // and updating the reported properties.
      try
      {
         Console.WriteLine("Rebooting!");
      }
      catch (Exception ex)
      {
         Console.WriteLine();
         Console.WriteLine("Error in sample: {0}", ex.Message);
      }

      string result = @"{""result"":""Reboot started.""}";
      return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
}

Примечание.

Для упрощения, в этой статье не реализуется никакая политика повторных попыток. В рабочем коде следует реализовать политики повторных попыток (например, с экспоненциальной задержкой), как указано в статье Обработка временных сбоев.

Примеры устройств SDK

Пакет SDK Для Интернета вещей Azure для .NET предоставляет рабочие примеры приложений устройств, обрабатывающих задачи прямого метода. Дополнительные сведения см. в разделе:

Создание серверного приложения

В этом разделе описывается, как активировать прямой метод на устройстве.

Класс ServiceClient предоставляет все методы, необходимые для создания серверного приложения для отправки прямых вызовов методов на устройства.

Необходимый для службы пакет NuGet

Приложения сервисного уровня backend требуют пакет NuGet Microsoft.Azure.Devices.

Добавьте эти using выражения, чтобы использовать библиотеку служб.

using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;

Подключение к Центру Интернета вещей

Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:

  • Политика общего доступа
  • Microsoft Entra

Внимание

В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.

Подключение с помощью политики общего доступа

Подключите серверное приложение с помощью CreateFromConnectionString.

Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.

В качестве параметра CreateFromConnectionStringукажите политику общего доступа к службе . Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".

ServiceClient serviceClient;
string connectionString = "{IoT hub service shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

Подключение с помощью Microsoft Entra

Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к IoT Hub. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".

Настройка приложения Microsoft Entra

Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:

  • Секрет клиента
  • Сертификат
  • Federated identity credential

Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. For example, IoT Hub Twin Contributor is required to enable read and write access to a IoT Hub device and module twins. Для получения дополнительной информации см. Управление доступом к IoT Hub с помощью назначения ролей в Azure RBAC.

Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.

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

Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential или упрощенный вариант ChainedTokenCredential. Для простоты в этом разделе описывается аутентификация с использованием DefaultAzureCredential и секрета клиента. Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential, см. руководство по использованию DefaultAzureCredential.

DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных по порядку, пока не найдет работающий вариант.

Microsoft Entra требует эти пакеты NuGet и соответствующие операторы using:

  • Azure.Core
  • Azure.Identity
using Azure.Core;
using Azure.Identity;

В этом примере секрет клиента приложения, идентификатор клиента Microsoft Entra и идентификатор арендатора добавляются в переменные среды. Эти переменные среды используются DefaultAzureCredential для проверки подлинности приложения. The result of a successful Microsoft Entra authentication is a security token credential that is passed to an IoT Hub connection method.

string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";

Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);

TokenCredential tokenCredential = new DefaultAzureCredential();

The resulting TokenCredential can then be passed to a connect to IoT Hub method for any SDK client that accepts Microsoft Entra credentials:

В этом примере TokenCredential передается в ServiceClient.Create для создания объекта подключения ServiceClient.

string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);

В этом примере TokenCredential передается в RegistryManager.Create, чтобы создать объект RegistryManager.

string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Пример кода

Для примера работы аутентификации службы Microsoft Entra см. пример аутентификации на основе ролей.

Вызов метода на устройстве

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

  1. Создайте объект CloudToDeviceMethod. Передайте имя прямого метода устройства в качестве параметра.
  2. Вызовите InvokeDeviceMethodAsync, чтобы вызвать метод на устройстве.

В этом примере вызывается метод "перезагрузка" для запуска перезагрузки на устройстве. The "reboot" method is mapped to a listener on the device as described in the Create a direct method callback listener section of this article.

string targetDevice = "myDeviceId";
CloudToDeviceMethod method = new CloudToDeviceMethod("reboot");
method.ResponseTimeout = TimeSpan.FromSeconds(30);

CloudToDeviceMethodResult response = await serviceClient.InvokeDeviceMethodAsync(targetDevice, method);

Console.WriteLine("Invoked firmware update on device.");

Примеры службы SDK

Пакет SDK Для Интернета вещей Azure для .NET предоставляет рабочие примеры приложений служб, обрабатывающих задачи сообщения. Дополнительные сведения см. в разделе:

  • Требуется пакет разработки Java SE 8. Убедитесь, что вы выбрали Java 8 в разделе долгосрочной поддержки , чтобы перейти к скачиванию для JDK 8.

Обзор

В этой статье описывается, как использовать Azure IoT SDK для Java для создания кода приложений для устройств и обратной сервисной службы, используемых для прямых методов взаимодействия с устройствами.

Создание приложения устройства

Этот раздел описывает, как использовать код приложения для устройства, чтобы создать прослушиватель обратного вызова для прямого метода.

Класс DeviceClient предоставляет все методы, необходимые для взаимодействия с прямыми методами на устройстве.

Внимание

В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.

Device import statements

Используйте следующие инструкции импорта устройств для доступа к пакету SDK Интернета вещей Azure для Java.

import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.exceptions.IotHubClientException;
import com.microsoft.azure.sdk.iot.device.twin.DirectMethodPayload;
import com.microsoft.azure.sdk.iot.device.twin.DirectMethodResponse;
import com.microsoft.azure.sdk.iot.device.twin.MethodCallback;
import com.microsoft.azure.sdk.iot.device.transport.IotHubConnectionStatus;
import com.microsoft.azure.sdk.iot.device.twin.SubscriptionAcknowledgedCallback;

Подключение устройства к Центру Интернета вещей

Приложение устройства может пройти проверку подлинности в IoT Hub с помощью следующих методов:

  • Общий ключ доступа
  • Сертификат X.509

Внимание

В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.

Проверка подлинности с помощью общего ключа доступа

Чтобы подключиться к устройству, выполните приведенные действия.

  1. Используйте IotHubClientProtocol для выбора протокола транспорта. Например:

    IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
    
  2. Используйте DeviceClient конструктор для добавления основной строки подключения устройства и протокола.

    String connString = "{IoT hub device connection string}";
    DeviceClient client = new DeviceClient(connString, protocol);
    
  3. Используйте открыть для подключения устройства к IoT Hub. Если клиент уже открыт, метод ничего не делает.

    client.open(true);
    

Проверка подлинности с помощью сертификата X.509

Чтобы подключить устройство к IoT Hub с помощью сертификата X.509:

  1. Создайте объект SSLContext с помощью buildSSLContext.
  2. SSLContext Добавьте сведения в объект ClientOptions.
  3. Call DeviceClient using the ClientOptions information to create the device-to-IoT Hub connection.

В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте Environment.GetEnvironmentVariable("PUBLICKEY") для чтения строковой переменной среды сертификата открытого ключа.

private static final String publicKeyCertificateString =
        "-----BEGIN CERTIFICATE-----\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "-----END CERTIFICATE-----\n";

//PEM encoded representation of the private key
private static final String privateKeyString =
        "-----BEGIN EC PRIVATE KEY-----\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "-----END EC PRIVATE KEY-----\n";

SSLContext sslContext = SSLContextBuilder.buildSSLContext(publicKeyCertificateString, privateKeyString);
ClientOptions clientOptions = ClientOptions.builder().sslContext(sslContext).build();
DeviceClient client = new DeviceClient(connString, protocol, clientOptions);

Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:

Примеры кода

For working samples of device X.509 certificate authentication, see:

Create a direct method callback listener

Use subscribeToMethods to initialize a direct method callback listener. subscribeToMethods прослушивает входящие прямые методы до завершения подключения. The method name and payload is received for each direct method call.

Прослушиватель должен вызвать DirectMethodResponse, чтобы отправить подтверждение ответа метода вызывающему приложению.

Например:

client.subscribeToMethods(
    (methodName, methodData, context) ->
    {
        System.out.println("Received a direct method invocation with name " + methodName + " and payload " + methodData.getPayloadAsJsonString());
        return new DirectMethodResponse(200, methodData);
    },
    null);
System.out.println("Successfully subscribed to direct methods");

Примечание.

Для упрощения, в этой статье не реализуется никакая политика повторных попыток. В рабочем коде следует реализовать политики повторных попыток (например, с экспоненциальной задержкой), как указано в статье Обработка временных сбоев.

Примеры устройств SDK

Пакет SDK Для Интернета вещей Azure для Java содержит рабочий пример для тестирования концепций приложения устройства, описанных в этой статье. Дополнительные сведения см. в примере прямого метода.

Создание серверного приложения

В этом разделе описывается, как инициировать удаленную перезагрузку на устройстве с помощью прямого метода.

Класс ServiceClientDeviceMethod содержит методы, которые службы могут использовать для доступа к прямым методам.

Service import statements

Используйте следующие инструкции импорта служб для доступа к пакету SDK Интернета вещей Azure для Java.

import com.microsoft.azure.sdk.iot.service.methods.DirectMethodRequestOptions;
import com.microsoft.azure.sdk.iot.service.methods.DirectMethodsClient;
import com.microsoft.azure.sdk.iot.service.methods.DirectMethodResponse;

Подключение к Центру Интернета вещей

Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:

  • Политика общего доступа
  • Microsoft Entra

Внимание

В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.

Подключение с помощью политики общего доступа

Use the DeviceMethod constructor to add the service primary connection string and connect to IoT Hub.

Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.

В качестве параметра конструктору DeviceMethod предоставьте политику общего доступа службы . Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".

Например:

String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
DeviceMethod methodClient = new DeviceMethod(iotHubConnectionString);

Подключение с помощью Microsoft Entra

Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к IoT Hub. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".

Обзор аутентификации Java SDK см. в разделе Аутентификация Azure с использованием Java и Azure Identity.

Для простоты в этом разделе рассматривается описание проверки подлинности с помощью секрета клиента.

Настройка приложения Microsoft Entra

Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:

  • Секрет клиента
  • Сертификат
  • Federated identity credential

Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. For example, IoT Hub Twin Contributor is required to enable read and write access to a IoT Hub device and module twins. Для получения дополнительной информации см. Управление доступом к IoT Hub с помощью назначения ролей в Azure RBAC.

Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.

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

Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential или упрощенный вариант ChainedTokenCredential. Для получения дополнительной информации о преимуществах и недостатках использования DefaultAzureCredential см. в разделе Цепочки учетных данных в библиотеке клиента Azure Identity для Java.

DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Оно пытается использовать несколько типов учетных данных в определенном порядке, пока не найдет подходящие учетные данные.

Идентификацию учетных данных приложения Microsoft Entra можно выполнить, используя DefaultAzureCredentialBuilder. Save connection parameters such as client secret tenantID, clientID, and client secret values as environmental variables. Once the TokenCredential is created, pass it to ServiceClient or other builder as the 'credential' parameter.

В этом примере DefaultAzureCredentialBuilder пытается выполнить проверку подлинности подключения из списка, описанного в defaultAzureCredential. The result of a successful Microsoft Entra authentication is a security token credential that is passed to a constructor such as ServiceClient.

TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Проверка подлинности с помощью ClientSecretCredentialBuilder

С помощью ClientSecretCredentialBuilder можно создать учетные данные с помощью сведений о секрете клиента. В случае успешного выполнения этот метод возвращает TokenCredential, который можно передать ServiceClient или другому объекту-строителю в качестве параметра 'credential'.

В этом примере в переменные среды добавлены секрет клиента, идентификатор клиента и идентификатор арендатора для регистрации приложений Microsoft Entra. These environment variables are used by ClientSecretCredentialBuilder to build the credential.

string clientSecretValue = System.getenv("AZURE_CLIENT_SECRET");
string clientID = System.getenv("AZURE_CLIENT_ID");
string tenantID = System.getenv("AZURE_TENANT_ID");

TokenCredential credential =
     new ClientSecretCredentialBuilder()
          .tenantId(tenantID)
          .clientId(clientID)
          .clientSecret(clientSecretValue)
          .build();
Другие классы проверки подлинности

Пакет SDK для Java также включает следующие классы, которые проходят проверку подлинности серверного приложения с помощью Microsoft Entra:

Примеры кода

Примеры работы аутентификации в службе Microsoft Entra см. в разделе Пример аутентификации на основе ролей.

Вызов метода на устройстве

Вызов DeviceMethod.invoke для вызова метода на устройстве и возврата состояния результата.

The invoke payload parameter is optional. Use null if there is no payload supplied. Параметр полезных данных может принимать различные формы данных, включая строку, массив байтов и хэш-таблицу. Примеры см. в разделе "Тесты прямых методов".

В этом примере вызывается метод "перезагрузка" для запуска перезагрузки на устройстве. The "reboot" method is mapped to a listener on the device as described in the Create a direct method callback listener section of this article.

Например:

String deviceId = "myFirstDevice";
String methodName = "reboot";
String payload = "Test payload";
Long responseTimeout = TimeUnit.SECONDS.toSeconds(30);
Long connectTimeout = TimeUnit.SECONDS.toSeconds(5);

MethodResult result = methodClient.invoke(deviceId, methodName, responseTimeout, connectTimeout, payload);
if (result == null)
{
    throw new IOException("Method invoke returns null");
}
System.out.println("Status=" + result.getStatus());

Примеры службы SDK

Пакет SDK Для Интернета вещей Azure для Java предоставляет рабочий пример приложений служб, обрабатывающих задачи прямого метода. Дополнительные сведения см. в разделе:

  • Рекомендуется использовать пакет SDK для Python версии 3.7 или более поздней версии. Обязательно используйте 32-разрядную или 64-разрядную версию установки согласно требованиям программы настройки. При появлении запроса во время установки обязательно добавьте Python в переменную среды соответствующей платформы.

Обзор

This article describes how to use the Azure IoT SDK for Python to create device and backend service application code for device direct methods.

Установка пакетов

Для создания приложений устройств необходимо установить библиотеку azure-iot-device .

pip install azure-iot-device

Для создания внутренних приложений службы необходимо установить библиотеку Azure-iot-hub.

pip install azure-iot-hub

Создание приложения устройства

Этот раздел описывает, как использовать код приложения устройства для создания слушателя обратных вызовов прямого метода.

Класс IoTHubDeviceClient содержит методы, которые можно использовать для работы с прямыми методами.

Документ о импорте устройства

Добавьте этот оператор импорта для доступа к IoTHubDeviceClient и MethodResponse.

# import the device client library
from azure.iot.device import IoTHubDeviceClient, MethodResponse

Подключение к устройству

Приложение устройства может пройти проверку подлинности в IoT Hub с помощью следующих методов:

  • Общий ключ доступа
  • Сертификат X.509

Внимание

В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.

Проверка подлинности с помощью общего ключа доступа

Используйте create_from_connection_string для подключения приложения к устройству с помощью строки подключения устройства.

# substitute the device connection string in conn_str
# and add it to the IoTHubDeviceClient object
conn_str = "{IoT hub device connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(conn_str)

Проверка подлинности с помощью сертификата X.509

Чтобы подключить устройство к IoT Hub с помощью сертификата X.509:

  1. Добавление параметров сертификата X.509 с помощью create_from_x509_certificate
  2. Call connect to connect the device client

В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте os.getenv("HOSTNAME") для чтения переменной среды имени узла.

# The Azure IoT hub name
hostname = "xxxxx.azure-devices.net"

# The device that has been created on the portal using X509 CA signing or self-signing capabilities
device_id = "MyDevice"

# The X.509 certificate file name
cert_file = "~/certificates/certs/sensor-thl-001-device.cert.pfx"
key_file = "~/certificates/certs/sensor-thl-001-device.cert.key"
# The optional certificate pass phrase
pass_phrase = "1234"

x509 = X509(
    cert_file,
    key_file,
    pass_phrase,
)

# The client object is used to interact with your Azure IoT hub.
device_client = IoTHubDeviceClient.create_from_x509_certificate(
    hostname=hostname, device_id=device_id, x509=x509
)

# Connect to IoT Hub
await device_client.connect()

Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:

Примеры кода

For working samples of device X.509 certificate authentication, see the examples whose file names end in x509 at Async hub scenarios.

Create a direct method callback

Используйте on_method_request_received для создания функции обработчика или корутины, вызываемой при получении прямого метода. Слушатель связан с ключевым словом метода, например "перезагрузка". Имя метода можно использовать в Концентраторе Интернета вещей или в серверном приложении для активации метода обратного вызова на устройстве.

The handler function should create a MethodResponse and pass it to send_method_response to send a direct method response acknowledgment to the calling application.

В этом примере настраивается обработчик прямых методов с именем method_request_handler.

try:
    # Attach the handler to the client
    client.on_method_request_received = method_request_handler
except:
    # In the event of failure, clean up
    client.shutdown()

В этом примере метод обратного вызова method_request_handler реализует прямой метод на устройстве. Код выполняется при вызове прямого метода rebootDevice из приложения-службы. Метод вызывает send_method_response, чтобы отправить подтверждение получения прямого метода вызывающему приложению.

# Define the handler for method requests
def method_request_handler(method_request):
    if method_request.name == "rebootDevice":
        # Act on the method by rebooting the device
        print("Rebooting device")
        time.sleep(20)
        print("Device rebooted")
        # Create a method response indicating the method request was resolved
        resp_status = 200
        resp_payload = {"Response": "This is the response from the device"}
        method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)
    else:
        # Create a method response indicating the method request was for an unknown method
        resp_status = 404
        resp_payload = {"Response": "Unknown method"}
        method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)

    # Send the method response
    client.send_method_response(method_response)

Примеры устройств SDK

Образец SDK Azure IoT для Python предоставляет рабочий пример устройства, обрабатывающего задачи прямого метода. For more information, see Receive direct method.

Создание серверного приложения

В этом разделе описывается, как использовать бэкенд-приложение для вызова прямого метода на устройстве.

Класс IoTHubRegistryManager предоставляет все методы, необходимые для создания серверного приложения для отправки сообщений на устройство.

Service import statements

Добавьте эти инструкции импорта для подключения к Центру IoT, отправки методов облачного взаимодействия с устройством и получения ответов на прямые методы от устройства.

from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.models import CloudToDeviceMethod, CloudToDeviceMethodResult

Подключение к Центру Интернета вещей

Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:

  • Политика общего доступа
  • Microsoft Entra

Внимание

В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.

Подключение с помощью политики общего доступа

Подключитесь к Центру Интернета вещей с помощью from_connection_string.

Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.

В качестве параметра from_connection_stringукажите политику общего доступа к службе . Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".

Например:

# Connect to IoT hub
IOTHUB_CONNECTION_STRING = "{IoT hub service connection string}"
iothub_registry_manager = IoTHubRegistryManager.from_connection_string(IOTHUB_CONNECTION_STRING)

Подключение с помощью Microsoft Entra

Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к IoT Hub. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".

Общие сведения о проверке подлинности пакета SDK для Python см. в статье "Проверка подлинности приложений Python в службах Azure с помощью пакета SDK Azure для Python"

Настройка приложения Microsoft Entra

Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:

  • Секрет клиента
  • Сертификат
  • Federated identity credential

Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. For example, IoT Hub Twin Contributor is required to enable read and write access to a IoT Hub device and module twins. Для получения дополнительной информации см. Управление доступом к IoT Hub с помощью назначения ролей в Azure RBAC.

Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.

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

Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential или упрощенный вариант ChainedTokenCredential. Для простоты в этом разделе описывается аутентификация с использованием DefaultAzureCredential и секрета клиента. Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential см. в разделе «Цепочки учетных данных» в клиентской библиотеке удостоверений Azure для Python.

DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. It attempts to use multiple credential types in an order until it finds a working credential.

Для Microsoft Entra требуется этот пакет импорта и соответствующая import инструкция:

pip install azure-identity
from azure.identity import DefaultAzureCredential

В этом примере секрет клиента, идентификатор клиента и идентификатор арендатора для регистрации приложения Microsoft Entra были добавлены в переменные среды. Эти переменные среды используются DefaultAzureCredential для проверки подлинности приложения. The result of a successful Microsoft Entra authentication is a security token credential that is passed to an IoT Hub connection method.

from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()

Полученный AccessToken затем может быть передан в from_token_credential, чтобы подключиться к IoT Hub для любого клиента SDK, который поддерживает учетные данные Microsoft Entra.

from_token_credential требуется два параметра:

  • URL-адрес службы Azure— URL-адрес службы Azure должен находиться в формате {Your Entra domain URL}.azure-devices.net без https:// префикса. Например, MyAzureDomain.azure-devices.net.
  • Токен учетных данных Azure

В этом примере учетные данные Azure получаются с помощью DefaultAzureCredential. Затем URL-адрес службы Azure и учетные данные предоставляются для IoTHubRegistryManager.from_token_credential для создания подключения к IoT Hub.

import sys
import os

from azure.identity import DefaultAzureCredential
from azure.iot.hub import IoTHubRegistryManager

# Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'

# Set environment variables
os.environ['AZURE_CLIENT_SECRET'] = clientSecretValue
os.environ['AZURE_CLIENT_ID'] = clientID
os.environ['AZURE_TENANT_ID'] = tenantID

# Acquire a credential object
credential = DefaultAzureCredential()

# Use Entra to authorize IoT Hub service
print("Connecting to IoTHubRegistryManager...")
iothub_registry_manager = IoTHubRegistryManager.from_token_credential(
url="MyAzureDomain.azure-devices.net",
token_credential=credential)
Примеры кода

Рабочие примеры проверки подлинности службы Microsoft Entra см. в разделе "Библиотека проверки подлинности Майкрософт" (MSAL) для Python.

Вызов метода на устройстве

Можно вызвать прямой метод по имени на устройстве. Имя метода определяет метод. In the following and previous device example shown in Create a direct method callback, the direct method name is "rebootDevice".

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

  1. Создайте объект CloudToDeviceMethod. Supply the method name and payload as parameters.
  2. Вызовите invoke_device_method для вызова прямого метода на устройстве. Укажите идентификатор устройства и CloudToDeviceMethod объект полезных данных в качестве параметров.

This example calls CloudToDeviceMethod to invoke a direct method named "rebootDevice" on a device. After the direct method is successfully invoked, the direct method response payload is displayed.

CONNECTION_STRING = "{IoTHubConnectionString}"
DEVICE_ID = "{deviceId}"

METHOD_NAME = "rebootDevice"
METHOD_PAYLOAD = "{\"method_number\":\"42\"}"
TIMEOUT = 60
WAIT_COUNT = 10

try:
    print ( "" )
    print ( "Invoking device to reboot..." )

    # Call the direct method.
    deviceMethod = CloudToDeviceMethod(method_name=METHOD_NAME, payload=METHOD_PAYLOAD)
    response = registry_manager.invoke_device_method(DEVICE_ID, deviceMethod)

    print ( "Successfully invoked the device to reboot." )

    print ( "The device has returned this payload:" )
    print ( response.payload )

except Exception as ex:
    print ( "" )
    print ( "Unexpected error {0}".format(ex) )
    return

Примеры службы SDK

Пакет SDK Для Интернета вещей Azure для Python предоставляет рабочие примеры приложений служб, обрабатывающих задачи прямого метода. Дополнительные сведения см. в разделе:

  • Требуется Node.js версии 10.0.x или более поздней

Обзор

В этой статье описывается, как использовать Azure IoT SDK для Node.js для создания кода приложений устройств и серверных служб для прямых методов устройств.

Создание приложения устройства

В этом разделе описывается, как использовать код приложения устройства для создания обратного вызова метода.

Установка пакета SDK

Пакет azure-iot-device содержит объекты, которые интерфейсирует с устройствами Интернета вещей. Выполните следующую команду, чтобы установить пакет SDK для устройств Azure-iot-device на компьютере разработки:

npm install azure-iot-device --save

Подключение устройства к Центру Интернета вещей

Приложение устройства может пройти проверку подлинности в IoT Hub с помощью следующих методов:

  • Сертификат X.509
  • Общий ключ доступа

Внимание

В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.

Проверка подлинности с помощью сертификата X.509

The X.509 certificate is attached to the device-to-IoT Hub connection transport.

Чтобы настроить подключение устройства к IoT-хабу, используя сертификат X.509:

  1. Вызовите fromConnectionString, чтобы добавить строку подключения устройства или модуля идентификации и тип транспортировки в объект Client. Добавьте x509=true в строку подключения, чтобы указать, что сертификат добавляется к DeviceClientOptions. Например:

    • A device connection string:

      HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true

    • Строка подключения модуля идентификации:

      HostName=xxxxx.azure-devices.net;DeviceId=Device-1;ModuleId=Module-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true

  2. Настройте переменную JSON с сведениями о сертификате и передайте ее в DeviceClientOptions.

  3. Call setOptions to add an X.509 certificate and key (and optionally, passphrase) to the client transport.

  4. Вызовите open, чтобы открыть подключение с устройства к центру Интернета вещей.

В этом примере показаны сведения о конфигурации сертификата в переменной JSON. Конфигурация сертификации clientOptions передается setOptions, и подключение открывается с помощью open.

const Client = require('azure-iot-device').Client;
const Protocol = require('azure-iot-device-mqtt').Mqtt;
// Connection string illustrated for demonstration only. Never hard-code the connection string in production. Instead use an environmental variable or other secure storage.
const connectionString = `HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true`
const client = Client.fromConnectionString(connectionString, Protocol);

var clientOptions = {
   cert: myX509Certificate,
   key: myX509Key,
   passphrase: passphrase,
   http: {
     receivePolicy: {
       interval: 10
     }
   }
 }

 client.setOptions(clientOptions);
 client.open(connectCallback);

Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:

Пример кода

Рабочий пример проверки подлинности сертификата X.509 см. в разделе "Простой пример устройства X.509".

Проверка подлинности с помощью общего ключа доступа

Выбор транспортного протокола

Объект Client поддерживает следующие протоколы:

  • Amqp
  • Http — При использовании Http экземпляр Client проверяет наличие сообщений из IoT-хаба редко (минимум каждые 25 минут).
  • Mqtt
  • MqttWs
  • AmqpWs

Установите необходимые транспортные протоколы на компьютере разработки.

Например, эта команда устанавливает Amqp протокол:

npm install azure-iot-device-amqp --save

Дополнительные сведения о различиях между MQTT, AMQP и HTTPS см. в статьях Руководство по обмену данными между облаком и устройством и Выбор протокола связи.

Создание клиентского объекта

Client Создайте объект с помощью установленного пакета.

Например:

const Client = require('azure-iot-device').Client;
Создание объекта протокола

Protocol Создайте объект с помощью установленного транспортного пакета.

В этом примере назначается протокол AMQP:

const Protocol = require('azure-iot-device-amqp').Amqp;
Добавьте строку подключения устройства и транспортный протокол

Вызов изConnectionString для предоставления параметров подключения устройства:

  • connStr — строка подключения устройства.
  • transportCtor — транспортный протокол.

В этом примере используется транспортный Amqp протокол:

const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Откройте подключение к IoT Hub

Используйте метод open, чтобы открыть подключение между устройством Интернета вещей и Центром Интернета вещей.

Например:

client.open(function(err) {
  if (err) {
    console.error('error connecting to hub: ' + err);
    process.exit(1);
  }
})

Create a direct method callback

Call onDeviceMethod to create a callback handler function or coroutine that is called when a direct method is received. Слушатель связан с ключевым словом метода, например "перезагрузка". Имя метода можно использовать в Концентраторе Интернета вещей или в серверном приложении для активации метода обратного вызова на устройстве.

Функция обработчика обратного вызова должна вызываться response.send для отправки сообщения подтверждения ответа в вызывающее приложение.

This example sets up a direct method handler named onReboot that is called when the "reboot" direct method name is used.

client.onDeviceMethod('reboot', onReboot);

В этом примере метод обратного вызова onReboot реализует прямой метод на устройстве. Код выполняется при вызове прямого метода перезагрузки из приложения-службы. Для отправки сообщения подтверждения ответа вызывающему приложению вызывается функция response.send.

var onReboot = function(request, response) {

    // Respond the cloud app for the direct method
    response.send(200, 'Reboot started', function(err) {
        if (err) {
            console.error('An error occurred when sending a method response:\n' + err.toString());
        } else {
            console.log('Response to method \'' + request.methodName + '\' sent successfully.');
        }
    });

    // Add your device's reboot API for physical restart.
    console.log('Rebooting!');
};

Примеры устройств SDK

Пакет SDK Для Интернета вещей Azure для Node.js предоставляет рабочие примеры приложений устройств, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе:

Создание серверного приложения

В этом разделе описывается, как вызвать прямой метод на устройстве.

Install service SDK package

Выполните следующую команду, чтобы установить azure-iothub на компьютере разработки:

npm install azure-iothub --save

Подключение к Центру Интернета вещей

Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:

  • Политика общего доступа
  • Microsoft Entra

Внимание

В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.

Подключение с помощью политики общего доступа

Используйте fromConnectionString для подключения к Центру Интернета вещей.

Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.

В качестве параметра для CreateFromConnectionString укажите строку подключения политики общего доступа службы. Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".

var Client = require('azure-iothub').Client;
var connectionString = '{IoT hub shared access policy connection string}';
var client = Client.fromConnectionString(connectionString);

Подключение с помощью Microsoft Entra

Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к IoT Hub. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".

Общие сведения о проверке подлинности пакета SDK для Node.js см. в следующих статье:

Настройка приложения Microsoft Entra

Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:

  • Секрет клиента
  • Сертификат
  • Federated identity credential

Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. For example, IoT Hub Twin Contributor is required to enable read and write access to a IoT Hub device and module twins. Для получения дополнительной информации см. Управление доступом к IoT Hub с помощью назначения ролей в Azure RBAC.

Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.

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

Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential или упрощенный вариант ChainedTokenCredential. Для простоты в этом разделе описывается аутентификация с использованием DefaultAzureCredential и секрета клиента. Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential см. в разделе "Цепочки учетных данных" в клиентской библиотеке удостоверений Azure для JavaScript

DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных по порядку, пока не найдет работающий.

Для Microsoft Entra требуется этот пакет:

npm install --save @azure/identity

В этом примере секрет клиента, идентификатор клиента и идентификатор арендатора для регистрации приложения Microsoft Entra были добавлены в переменные среды. Эти переменные среды используются DefaultAzureCredential для проверки подлинности приложения. The result of a successful Microsoft Entra authentication is a security token credential that is passed to an IoT Hub connection method.

import { DefaultAzureCredential } from "@azure/identity";

// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();

The resulting credential token can then be passed to fromTokenCredential to connect to IoT Hub for any SDK client that accepts Microsoft Entra credentials:

fromTokenCredential требуется два параметра:

  • URL-адрес службы Azure— URL-адрес службы Azure должен находиться в формате {Your Entra domain URL}.azure-devices.net без https:// префикса. Например, MyAzureDomain.azure-devices.net.
  • Токен учетных данных Azure

В этом примере учетные данные Azure получаются с помощью DefaultAzureCredential. The Azure domain URL and credential are then supplied to Registry.fromTokenCredential to create the connection to IoT Hub.

const { DefaultAzureCredential } = require("@azure/identity");

let Registry = require('azure-iothub').Registry;

// Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'

// Set environment variables
process.env['AZURE_CLIENT_SECRET'] = clientSecretValue;
process.env['AZURE_CLIENT_ID'] = clientID;
process.env['AZURE_TENANT_ID'] = tenantID;

// Acquire a credential object
const credential = new DefaultAzureCredential()

// Create an instance of the IoTHub registry
hostName = 'MyAzureDomain.azure-devices.net';
let registry = Registry.fromTokenCredential(hostName,credential);
Примеры кода

Чтобы ознакомиться с рабочими примерами проверки подлинности службы Microsoft Entra, см. Примеры удостоверений Azure.

Вызов метода на устройстве

Используйте invokeDeviceMethod для вызова прямого метода по имени на устройстве. Параметр имени метода определяет прямой метод.

В этом примере вызывается метод "перезагрузка" для запуска перезагрузки на устройстве. The "reboot" method is mapped to a callback handler function on the device as described in the Create a direct method callback section of this article.

var startRebootDevice = function(deviceToReboot) {

    var methodName = "reboot";

    var methodParams = {
        methodName: methodName,
        payload: null,
        timeoutInSeconds: 30
    };

    client.invokeDeviceMethod(deviceToReboot, methodParams, function(err, result) {
        if (err) {
            console.error("Direct method error: "+err.message);
        } else {
            console.log("Successfully invoked the device to reboot.");  
        }
    });
};

Примеры службы SDK

Пакет SDK Для Интернета вещей Azure для Node.js предоставляет рабочие примеры приложений служб, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе: