Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Серверные приложения могут использовать примитивы Центра Интернета вещей Azure, такие как двойники устройств и прямые методы, для удаленного запуска и мониторинга действий управления устройствами.
Используйте прямой метод из серверной программы для запуска действий управления устройствами, таких как перезагрузка, сброс до заводских настроек и обновление прошивки.
Устройство отвечает за следующие действия:
- Обработка запроса прямого метода, отправленного из центра Интернета вещей
- Запуск соответствующего действия для конкретного устройства
- Предоставление обновлений состояния через сообщаемые свойства в Центр Интернета вещей.
В этой статье показано, как серверное приложение и приложение устройства могут работать вместе, чтобы инициировать и отслеживать действие удаленного устройства с помощью прямого метода.
- Приложение-служба вызывает прямой метод перезагрузки в приложении устройства через Центр Интернета вещей.
- Приложение устройства обрабатывает прямой метод перезагрузки устройства.
Примечание.
Функции, описанные в этой статье, доступны только на стандартном уровне Центра Интернета вещей. Дополнительные сведения о базовых и стандартных и бесплатных уровнях Центра Интернета вещей см. в разделе Выберите нужный уровень и размер Центра Интернета вещей для вашего решения.
Примечание.
Эта статья предназначена для дополнения примеров пакетов SDK Для Интернета вещей Azure, на которые ссылается эта статья. Средства SDK можно использовать для создания приложений устройств и внутренних приложений.
Необходимые условия
Центр Интернета вещей.
Зарегистрированное устройство
Если приложение использует протокол MQTT, убедитесь, что порт 8883 открыт в брандмауэре. Протокол MQTT взаимодействует через порт 8883. В некоторых корпоративных и академических сетях этот порт может быть заблокирован. Дополнительные сведения и способы устранения этой проблемы см. в разделе о подключении к Центру Интернета вещей по протоколу MQTT.
- Требуется Visual Studio
Обзор
В этой статье описывается, как использовать Azure IoT SDK для .NET для создания кода приложения устройств и кода серверной службы для прямых сообщений с устройствами.
Создание приложения устройства
Этот раздел описывает, как использовать код приложения устройства для создания прослушивателя обратного вызова метода.
Обязательные пакеты NuGet для устройства
Клиентские приложения устройств, написанные на C#, требуют пакета NuGet Microsoft.Azure.Devices.Client .
Добавьте эти using инструкции для использования библиотеки устройств.
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности в Центр Интернета вещей с помощью следующих методов:
- Общий ключ доступа
- Сертификат X.509
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Проверка подлинности с помощью общего ключа доступа
Класс DeviceClient предоставляет все методы, необходимые для взаимодействия с сообщениями устройства с устройства.
Подключитесь к устройству, используя метод CreateFromConnectionString со строкой подключения устройства и транспортным протоколом подключения.
Параметр CreateFromConnectionStringтранспортного протокола TransportType поддерживает следующие транспортные протоколы:
MqttMqtt_WebSocket_OnlyMqtt_Tcp_OnlyAmqpAmqp_WebSocket_OnlyAmqp_Tcp_OnlyHttp1
Этот пример подключается к устройству с использованием транспортного протокола 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.
В этом примере сведения об устройстве и сертификате заполняются в объекте authDeviceAuthenticationWithX509Certificate , передаваемом в DeviceClient.Create.
В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте Environment.GetEnvironmentVariable("HOSTNAME") для чтения переменной среды имени узла.
RootCertPath = "~/certificates/certs/sensor-thl-001-device.cert.pem";
Intermediate1CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate1.cert.pem";
Intermediate2CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate2.cert.pem";
DevicePfxPath = "~/certificates/certs/sensor-thl-001-device.cert.pfx";
DevicePfxPassword = "1234";
DeviceName = "MyDevice";
HostName = "xxxxx.azure-devices.net";
var chainCerts = new X509Certificate2Collection();
chainCerts.Add(new X509Certificate2(RootCertPath));
chainCerts.Add(new X509Certificate2(Intermediate1CertPath));
chainCerts.Add(new X509Certificate2(Intermediate2CertPath));
using var deviceCert = new X509Certificate2(DevicePfxPath, DevicePfxPassword);
using var auth = new DeviceAuthenticationWithX509Certificate(DeviceName, deviceCert, chainCerts);
using var deviceClient = DeviceClient.Create(
HostName,
auth,
TransportType.Amqp);
Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:
- Проверка подлинности удостоверений с помощью сертификатов X.509
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
Рабочие примеры проверки подлинности сертификата X.509 см. здесь:
- Подключение к сертификату X.509
- Тесты на аутентификацию DeviceClientX509
- Управляемый проект – безопасное развертывание и масштабирование устройств Интернета вещей с помощью службы подготовки устройств Центр Интернета вещей
Создать слушатель обратного вызова метода прямого доступа
Используйте SetMethodHandlerAsync для инициализации прослушивателя обратного вызова метода. Слушатель связан с ключевым словом метода, например "перезагрузка". Имя метода можно использовать в Концентраторе Интернета вещей или в серверном приложении для активации метода обратного вызова на устройстве.
В этом примере настраивается прослушиватель обратного вызова onReboot, который активируется при вызове прямого метода с именем "reboot".
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
Приложения сервисного уровня backend требуют пакет NuGet Microsoft.Azure.Devices.
Добавьте эти using выражения, чтобы использовать библиотеку служб.
using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.
Подключение с помощью политики общего доступа
Подключите серверное приложение с помощью CreateFromConnectionString.
Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.
В качестве параметра CreateFromConnectionStringукажите политику общего доступа к службе . Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
ServiceClient serviceClient;
string connectionString = "{IoT hub service shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к Центр Интернета вещей. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Учётные данные федеративной идентификации
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Участник в Центр Интернета вещей Twin требуется для предоставления доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Для получения дополнительной информации см. Управление доступом к Центр Интернета вещей с помощью назначения ролей в Azure RBAC.
Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential или упрощенный вариант ChainedTokenCredential. Для простоты в этом разделе описывается аутентификация с использованием DefaultAzureCredential и секрета клиента. Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential, см. руководство по использованию DefaultAzureCredential.
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных по порядку, пока не найдет работающий вариант.
Microsoft Entra требует эти пакеты NuGet и соответствующие операторы using:
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
В этом примере секрет клиента приложения, идентификатор клиента Microsoft Entra и идентификатор арендатора добавляются в переменные среды. Эти переменные среды используются DefaultAzureCredential для проверки подлинности приложения. Результат успешной проверки подлинности 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.
Обзор
В этой статье описывается, как использовать Azure IoT SDK для Java для создания кода приложений для устройств и обратной сервисной службы, используемых для прямых методов взаимодействия с устройствами.
Создание приложения устройства
Этот раздел описывает, как использовать код приложения устройства для создания прослушивателя обратного вызова метода.
Класс DeviceClient предоставляет все методы, необходимые для взаимодействия с прямыми методами на устройстве.
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Инструкции импорта устройств
Используйте следующие инструкции импорта устройств для доступа к пакету 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
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Проверка подлинности с помощью общего ключа доступа
Чтобы подключиться к устройству, выполните приведенные действия.
Используйте IotHubClientProtocol для выбора протокола транспорта. Например:
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;Используйте
DeviceClientконструктор для добавления основной строки подключения устройства и протокола.String connString = "{IoT hub device connection string}"; DeviceClient client = new DeviceClient(connString, protocol);Используйте открыть для подключения устройства к IoT Hub. Если клиент уже открыт, метод ничего не делает.
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 см. здесь:
Создать слушатель обратного вызова метода прямого доступа
Используйте subscribeToMethods для инициализации слушателя обратных вызовов прямых методов.
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 содержит рабочий пример для тестирования концепций приложения устройства, описанных в этой статье. Дополнительные сведения см. в примере прямого метода.
Создание серверного приложения
В этом разделе описывается, как инициировать удаленную перезагрузку на устройстве с помощью прямого метода.
Класс ServiceClientDeviceMethod содержит методы, которые службы могут использовать для доступа к прямым методам.
Инструкции импорта сервисов
Используйте следующие инструкции импорта служб для доступа к пакету 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".
Обзор аутентификации Java SDK см. в разделе Аутентификация Azure с использованием Java и Azure Identity.
Для простоты в этом разделе рассматривается описание проверки подлинности с помощью секрета клиента.
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Учётные данные федеративной идентификации
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Участник в Центр Интернета вещей Twin требуется для предоставления доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Для получения дополнительной информации см. Управление доступом к Центр Интернета вещей с помощью назначения ролей в Azure RBAC.
Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential или упрощенный вариант ChainedTokenCredential.
Для получения дополнительной информации о преимуществах и недостатках использования DefaultAzureCredential см. в разделе Цепочки учетных данных в библиотеке клиента Azure Identity для Java.
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных по порядку, пока не найдет работающий вариант.
Идентификацию учетных данных приложения Microsoft Entra можно выполнить, используя DefaultAzureCredentialBuilder. Сохраните параметры подключения, такие как секрет клиента, tenantID, clientID и значения секрета клиента, в качестве переменных среды. После создания TokenCredential передайте его в ServiceClient или другой построитель как параметр 'credential'.
В этом примере DefaultAzureCredentialBuilder пытается выполнить проверку подлинности подключения из списка, описанного в defaultAzureCredential. Результат успешной проверки подлинности Microsoft Entra — это учетные данные токена безопасности, передаваемые конструктору, вроде ServiceClient.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Проверка подлинности с помощью ClientSecretCredentialBuilder
С помощью ClientSecretCredentialBuilder можно создать учетные данные с помощью сведений о секрете клиента. В случае успешного выполнения этот метод возвращает TokenCredential, который можно передать 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 (Клиентский сертификатCredential)
- 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 в переменную среды соответствующей платформы.
Обзор
В этой статье описывается, как использовать Azure IoT SDK для 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
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Проверка подлинности с помощью общего ключа доступа
Используйте create_from_connection_string для подключения приложения к устройству с помощью строки подключения устройства.
# substitute the device connection string in conn_str
# and add it to the IoTHubDeviceClient object
conn_str = "{IoT hub device connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(conn_str)
Проверка подлинности с помощью сертификата X.509
Чтобы подключить устройство к Центр Интернета вещей с помощью сертификата X.509:
- Добавление параметров сертификата X.509 с помощью create_from_x509_certificate
- Вызовите connect, чтобы подключить клиента устройства
В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте 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 hub.
Создать callback прямого метода
Используйте on_method_request_received для создания функции обработчика или корутины, вызываемой при получении прямого метода. Слушатель связан с ключевым словом метода, например "перезагрузка". Имя метода можно использовать в Концентраторе Интернета вещей или в серверном приложении для активации метода обратного вызова на устройстве.
Функция обработчика должна создать MethodResponse и передать его в 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 IoT для 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 могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Участник в Центр Интернета вещей Twin требуется для предоставления доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Для получения дополнительной информации см. Управление доступом к Центр Интернета вещей с помощью назначения ролей в Azure RBAC.
Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.
Проверка подлинности с помощью 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 для создания служебного подключения к Центр Интернета вещей с помощью учетных данных маркера Entra.
- IoTHubJobManager (Менеджер заданий)
- DigitalTwinClient (Цифровой TwinClient)
- 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 или более поздней
Обзор
В этой статье описывается, как использовать Azure IoT SDK для Node.js для создания кода приложений устройств и серверных служб для прямых методов устройств.
Создание приложения устройства
В этом разделе описывается, как использовать код приложения устройства для создания обратного вызова метода.
Установка пакета SDK
Пакет azure-iot-device содержит объекты, которые интерфейсирует с устройствами Интернета вещей. Выполните следующую команду, чтобы установить пакет SDK для устройств Azure-iot-device на компьютере разработки:
npm install azure-iot-device --save
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности в Центр Интернета вещей с помощью следующих методов:
- Сертификат X.509
- Общий ключ доступа
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Проверка подлинности с помощью сертификата X.509
Сертификат X.509 прикреплён к транспортному соединению устройства с IoT-хабом.
Чтобы настроить подключение устройства к IoT-хабу, используя сертификат 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 (и при необходимости парольную фразу) в транспорт клиента.
Вызовите open, чтобы открыть подключение с устройства к центру Интернета вещей.
В этом примере показаны сведения о конфигурации сертификата в переменной JSON. Конфигурация сертификации clientOptions передается setOptions, и подключение открывается с помощью open.
const Client = require('azure-iot-device').Client;
const Protocol = require('azure-iot-device-mqtt').Mqtt;
// Connection string illustrated for demonstration only. Never hard-code the connection string in production. Instead use an environmental variable or other secure storage.
const connectionString = `HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true`
const client = Client.fromConnectionString(connectionString, Protocol);
var clientOptions = {
cert: myX509Certificate,
key: myX509Key,
passphrase: passphrase,
http: {
receivePolicy: {
interval: 10
}
}
}
client.setOptions(clientOptions);
client.open(connectCallback);
Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:
- Проверка подлинности удостоверений с помощью сертификатов X.509
- Создание и отправка сертификатов для тестирования
Пример кода
Рабочий пример проверки подлинности сертификата X.509 см. в разделе "Простой пример устройства X.509".
Проверка подлинности с помощью общего ключа доступа
Выбор транспортного протокола
Объект Client поддерживает следующие протоколы:
Amqp-
Http— При использованииHttpэкземплярClientпроверяет наличие сообщений из IoT-хаба редко (минимум каждые 25 минут). MqttMqttWsAmqpWs
Установите необходимые транспортные протоколы на компьютере разработки.
Например, эта команда устанавливает 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);
Откройте подключение к Центр Интернета вещей
Используйте метод open, чтобы открыть подключение между устройством Интернета вещей и Центром Интернета вещей.
Например:
client.open(function(err) {
if (err) {
console.error('error connecting to hub: ' + err);
process.exit(1);
}
})
Создать callback прямого метода
Вызовите 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 предоставляет рабочие примеры приложений устройств, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе:
- Пример метода работы устройства
- Методы тестирования устройства E2E
- Устройство DM шаблонов перезагружается
Создание серверного приложения
В этом разделе описывается, как вызвать прямой метод на устройстве.
Установите пакет 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 могут требовать определенные разрешения ролей в зависимости от выполняемых операций. Например, Участник в Центр Интернета вещей Twin требуется для предоставления доступа на чтение и запись к двойникам устройства и модуля Центр Интернета вещей. Для получения дополнительной информации см. Управление доступом к Центр Интернета вещей с помощью назначения ролей в Azure RBAC.
Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential или упрощенный вариант ChainedTokenCredential. Для простоты в этом разделе описывается аутентификация с использованием DefaultAzureCredential и секрета клиента.
Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential см. в разделе "Цепочки учетных данных" в клиентской библиотеке удостоверений Azure для JavaScript
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных по порядку, пока не найдет работающий вариант.
Для Microsoft Entra требуется этот пакет:
npm install --save @azure/identity
В этом примере секрет клиента, идентификатор клиента и идентификатор арендатора для регистрации приложения Microsoft Entra были добавлены в переменные среды. Эти переменные среды используются DefaultAzureCredential для проверки подлинности приложения. Результат успешной проверки подлинности Microsoft Entra — это учетные данные токена безопасности, передаваемые методу подключения Центра Интернета вещей (Центр Интернета вещей).
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
Затем полученный токен учетных данных можно передать fromTokenCredential для подключения к центру Интернета вещей для любого клиента SDK, который принимает учетные данные Microsoft Entra.
fromTokenCredential требуется два параметра:
- URL-адрес службы Azure— URL-адрес службы Azure должен находиться в формате
{Your Entra domain URL}.azure-devices.netбезhttps://префикса. Например,MyAzureDomain.azure-devices.net. - Токен учетных данных Azure
В этом примере учетные данные Azure получаются с помощью DefaultAzureCredential. Затем URL-адрес домена Azure и учетные данные передаются в Registry.fromTokenCredential для создания подключения к Центр Интернета вещей.
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 предоставляет рабочие примеры приложений служб, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе: