Управление устройством: начало работы
Внутренние приложения могут использовать Центр Интернета вещей 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:
Используйте DeviceAuthenticationWithX509Certificate для создания объекта, содержащего сведения об устройстве и сертификате.
DeviceAuthenticationWithX509Certificate
передается в качестве второго параметраDeviceClient.Create
(шаг 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
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
Примеры работы проверки подлинности сертификата X.509 см. в статье:
- Подключение к сертификату X.509
- DeviceClientX509AuthenticationE2ETests
- Управляемый проект. Защита и масштабирование устройств Интернета вещей с помощью службы подготовки устройств Центр Интернета вещей
Создание прослушивателя обратного вызова прямого метода
Используйте 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 см . в примере проверки подлинности на основе ролей.
Вызов метода на устройстве
Чтобы вызвать метод на устройстве, выполните приведенные действия.
- Создайте объект CloudToDeviceMethod. Передайте имя прямого метода устройства в качестве параметра.
- Вызовите 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 является более безопасным подходом. Дополнительные сведения см. в разделе "Рекомендации > по обеспечению безопасности подключений".
Проверка подлинности с помощью общего ключа доступа
Чтобы подключиться к устройству, выполните приведенные действия.
Используйте IotHubClientProtocol для выбора протокола транспорта. Например:
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
DeviceClient
Используйте конструктор для добавления основного строка подключения устройства и протокола.String connString = "{IoT hub device connection string}"; DeviceClient client = new DeviceClient(connString, protocol);
Используйте открытую для подключения устройства к Центру Интернета вещей. Если клиент уже открыт, метод ничего не делает.
client.open(true);
Проверка подлинности с помощью сертификата X.509
Чтобы подключить устройство к Центр Интернета вещей с помощью сертификата X.509:
- Создайте объект SSLContext с помощью buildSSLContext.
SSLContext
Добавьте сведения в объект ClientOptions.- Вызов 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
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
Примеры работы проверки подлинности сертификата 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:
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
Примеры кода
Примеры работы проверки подлинности службы 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:
- Добавление параметров сертификата X.509 с помощью create_from_x509_certificate
- Вызов подключения для подключения клиента устройства
В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте 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
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
Рабочие примеры проверки подлинности сертификата 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:
- IoTHubRegistryManager для создания подключения к службе для Центр Интернета вещей с помощью учетных данных маркера Записи.
- IoTHubJobManager
- DigitalTwinClient
- IoTHubHttpRuntimeManager
- IoTHubConfigurationManager
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".
Чтобы вызвать прямой метод на устройстве, сделайте следующее:
- Создайте объект CloudToDeviceMethod. Укажите имя метода и полезные данные в качестве параметров.
- Вызовите 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:
Вызовите 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
Настройте переменную JSON с сведениями о сертификате и передайте ее в DeviceClientOptions.
Вызов setOptions для добавления сертификата и ключа X.509 (при необходимости парольной фразы) в транспорт клиента.
Вызовите, чтобы открыть подключение с устройства, чтобы Центр Интернета вещей.
В этом примере показаны сведения о конфигурации сертификата в переменной 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 см. в разделе "Простой пример устройства X.509".
Проверка подлинности с помощью общего ключа доступа
Выбор транспортного протокола
Объект Client
поддерживает следующие протоколы:
Amqp
Http
— При использованииHttp
Client
экземпляр проверяет наличие сообщений из Центр Интернета вещей редко (как минимум каждые 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 см. в следующих статье:
- Начало работы с проверкой подлинности пользователей в Azure
- Клиентская библиотека удостоверений Azure для JavaScript
Настройка приложения 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 предоставляет рабочие примеры приложений служб, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе: