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


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

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

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

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

  • Обработка запроса прямого метода, отправленного из Центр Интернета вещей
  • Инициирование соответствующего действия для конкретного устройства на устройстве
  • Предоставление обновлений состояния через сообщаемые свойства для Центр Интернета вещей

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

  • Приложение-служба вызывает прямой метод перезагрузки в приложении устройства через Центр Интернета вещей.
  • Приложение устройства обрабатывает прямой метод перезагрузки устройства.

Примечание.

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

Примечание.

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

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

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

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

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

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

Обзор

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

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

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

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

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

Добавьте эти using инструкции для использования библиотеки устройств.

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

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

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

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

Внимание

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

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

Класс 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

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

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

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

В этом примере сведения об устройстве и сертификате заполняются в объекте auth DeviceAuthenticationWithX509Certificate , передаваемом в 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);

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

Примеры кода

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

Создание прослушивателя обратного вызова прямого метода

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

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

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);
}

Продолжая пример, onReboot метод обратного вызова реализует прямой метод на устройстве.

Функция обработчика вызывает 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 службы

Для приложений серверной службы требуется пакет 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, должно успешно пройти проверку подлинности и получить учетные данные маркера безопасности перед подключением к Центр Интернета вещей. Этот маркер передается методу подключения Центр Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".

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

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

  • Секрет клиента
  • Сертификат
  • Учетные данные федеративного удостоверения

Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Центр Интернета вещей участник двойников требуется для включения доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Дополнительные сведения см. в статье "Управление доступом к Центр Интернета вещей с помощью назначения ролей Azure RBAC".

Дополнительные сведения о настройке приложения Microsoft Entra см. в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.

Проверка подлинности с помощью 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 для проверки подлинности приложения. Результат успешной проверки подлинности Microsoft Entra — это учетные данные маркера безопасности, передаваемые методу подключения Центр Интернета вещей.

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();

Результирующий tokenCredential можно передать в подключение к методу Центр Интернета вещей для любого клиента ПАКЕТА SDK, который принимает учетные данные Microsoft Entra:

В этом примере 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, чтобы вызвать метод на устройстве.

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

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.

Обзор

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

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

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

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

Внимание

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

Операторы импорта устройства

Используйте следующие инструкции импорта устройств для доступа к пакету 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;

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

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

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

Внимание

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

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

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

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

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

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

    client.open(true);
    

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

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

  1. Создайте объект SSLContext с помощью buildSSLContext.
  2. SSLContext Добавьте сведения в объект ClientOptions.
  3. Вызов DeviceClient с помощью ClientOptions сведений для создания подключения "устройство — Центр Интернета вещей".

В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используется 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);

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

Примеры кода

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

Создание прослушивателя обратного вызова прямого метода

Используйте подпискуToMethods для инициализации прослушивателя обратных вызовов прямого метода. subscribeToMethods прослушивает входящие прямые методы до завершения подключения. Имя метода и полезные данные получаются для каждого вызова прямого метода.

Прослушиватель должен вызвать 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 содержит рабочий пример для тестирования концепций приложения устройства, описанных в этой статье. Дополнительные сведения см. в примере прямого метода.

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

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

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

Инструкции импорта служб

Используйте следующие инструкции импорта служб для доступа к пакету 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".

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

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

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

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

Например:

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

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

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

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

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

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

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

  • Секрет клиента
  • Сертификат
  • Учетные данные федеративного удостоверения

Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Центр Интернета вещей участник двойников требуется для включения доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Дополнительные сведения см. в статье "Управление доступом к Центр Интернета вещей с помощью назначения ролей Azure RBAC".

Дополнительные сведения о настройке приложения Microsoft Entra см. в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.

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

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

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

Учетные данные приложения Microsoft Entra можно выполнить с помощью DefaultAzureCredentialBuilder. Сохраните параметры подключения, такие как client secretID, clientID и значения секрета клиента в качестве переменных среды. TokenCredential После создания передайте его в ServiceClient или другой построитель в качестве параметра credential.

В этом примере DefaultAzureCredentialBuilder пытается выполнить проверку подлинности подключения из списка, описанного в defaultAzureCredential. Результат успешной проверки подлинности Microsoft Entra — это учетные данные маркера безопасности, передаваемые конструктору, например ServiceClient.

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

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

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

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 для вызова метода на устройстве и возврата состояния результата.

Параметр invoke полезных данных необязателен. Используйте, null если полезные данные отсутствуют. Параметр полезных данных может принимать различные формы данных, включая строковый массив, массив байтов и хэш-карту. Примеры см. в разделе "Тесты прямых методов".

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

Например:

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 в переменную среды соответствующей платформы.

Обзор

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

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

Для создания приложений устройств необходимо установить библиотеку 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

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

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

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

Внимание

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

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

Используйте 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

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

  1. Добавление параметров сертификата X.509 с помощью create_from_x509_certificate
  2. Вызов подключения для подключения клиента устройства

В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте 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()

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

Примеры кода

Рабочие примеры проверки подлинности сертификата X.509 см. в примерах, имена файлов которых заканчиваются в сценариях x509 в концентраторе Async.

Создание обратного вызова метода прямого метода

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

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

В этом примере настраивается обработчик прямых методов с именем 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 для Python предоставляет рабочий пример приложения устройства, обрабатывающего задачи прямого метода. Дополнительные сведения см. в разделе "Получение прямого метода".

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

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

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

Инструкции импорта служб

Добавьте эти инструкции импорта для подключения к Центру 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, должно успешно пройти проверку подлинности и получить учетные данные маркера безопасности перед подключением к Центр Интернета вещей. Этот маркер передается методу подключения Центр Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".

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

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

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

  • Секрет клиента
  • Сертификат
  • Учетные данные федеративного удостоверения

Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Центр Интернета вещей участник двойников требуется для включения доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Дополнительные сведения см. в статье "Управление доступом к Центр Интернета вещей с помощью назначения ролей Azure RBAC".

Дополнительные сведения о настройке приложения Microsoft Entra см. в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.

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

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

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

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

pip install azure-identity
from azure.identity import DefaultAzureCredential

В этом примере в переменные среды были добавлены секрет клиента регистрации приложений Microsoft Entra, идентификатор клиента и идентификатор клиента. Эти переменные среды используются DefaultAzureCredential для проверки подлинности приложения. Результат успешной проверки подлинности Microsoft Entra — это учетные данные маркера безопасности, передаваемые методу подключения Центр Интернета вещей.

from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()

Результирующий AccessToken можно передать для from_token_credential подключения к Центр Интернета вещей для любого клиента ПАКЕТА 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 создания подключения к Центр Интернета вещей.

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.

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

Можно вызвать прямой метод по имени на устройстве. Имя метода определяет метод. В следующем и предыдущем примере устройства, показанном в разделе "Создание обратного вызова метода", имя прямого метода — "rebootDevice".

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

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

В этом примере вызывается CloudToDeviceMethod прямой метод с именем rebootDevice на устройстве. После успешного вызова прямого метода отображается полезные данные ответа прямого метода.

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 или более поздней

Обзор

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

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

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

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

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

npm install azure-iot-device --save

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

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

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

Внимание

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

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

Сертификат X.509 подключен к транспорту подключения устройства к Центр Интернета вещей.

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

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

    • Устройство строка подключения:

      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. Вызов setOptions для добавления сертификата и ключа X.509 (при необходимости парольной фразы) в транспорт клиента.

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

В этом примере показаны сведения о конфигурации сертификата в переменной 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— При использовании HttpClient экземпляр проверяет наличие сообщений из Центр Интернета вещей редко (как минимум каждые 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);
Открытие подключения к Центр Интернета вещей

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

Например:

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

Создание обратного вызова метода прямого метода

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

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

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

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 предоставляет рабочие примеры приложений устройств, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе:

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

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

Установка пакета ПАКЕТА SDK службы

Выполните следующую команду, чтобы установить 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, должно успешно пройти проверку подлинности и получить учетные данные маркера безопасности перед подключением к Центр Интернета вещей. Этот маркер передается методу подключения Центр Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".

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

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

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

  • Секрет клиента
  • Сертификат
  • Учетные данные федеративного удостоверения

Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Центр Интернета вещей участник двойников требуется для включения доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Дополнительные сведения см. в статье "Управление доступом к Центр Интернета вещей с помощью назначения ролей Azure RBAC".

Дополнительные сведения о настройке приложения Microsoft Entra см. в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.

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

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

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

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

npm install --save @azure/identity

В этом примере в переменные среды были добавлены секрет клиента регистрации приложений Microsoft Entra, идентификатор клиента и идентификатор клиента. Эти переменные среды используются DefaultAzureCredential для проверки подлинности приложения. Результат успешной проверки подлинности Microsoft Entra — это учетные данные маркера безопасности, передаваемые методу подключения Центр Интернета вещей.

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

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

Затем полученный маркер учетных данных можно передать изTokenCredential для подключения к Центр Интернета вещей для любого клиента ПАКЕТА SDK, который принимает учетные данные Microsoft Entra:

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

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

В этом примере учетные данные Azure получаются с помощью DefaultAzureCredential. Затем для создания подключения к Центр Интернета вещей предоставляется Registry.fromTokenCredential URL-адрес домена Azure и учетные данные.

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 для вызова прямого метода по имени на устройстве. Параметр имени метода определяет прямой метод.

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

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 предоставляет рабочие примеры приложений служб, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе: