Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Серверные приложения могут использовать примитивы Центра Интернета вещей Azure, такие как двойники устройств и прямые методы, для удаленного запуска и мониторинга действий управления устройствами.
Используйте прямой метод из серверной программы для запуска действий управления устройствами, таких как перезагрузка, сброс до заводских настроек и обновление прошивки.
Устройство отвечает за следующие действия:
- Handling the direct method request sent from IoT Hub
- Запуск соответствующего действия для конкретного устройства
- Providing status updates through reported properties to IoT Hub
В этой статье показано, как серверное приложение и приложение устройства могут работать вместе, чтобы инициировать и отслеживать действие удаленного устройства с помощью прямого метода.
- A service app calls a direct method to reboot in a device app through an IoT hub.
- Приложение устройства обрабатывает прямой метод перезагрузки устройства.
Примечание.
Функции, описанные в этой статье, доступны только на стандартном уровне Центра Интернета вещей. Дополнительные сведения о базовых и стандартных и бесплатных уровнях Центра Интернета вещей см. в разделе Выберите нужный уровень и размер Центра Интернета вещей для вашего решения.
Примечание.
Эта статья предназначена для дополнения примеров пакетов SDK Для Интернета вещей Azure, на которые ссылается эта статья. Средства SDK можно использовать для создания приложений устройств и внутренних приложений.
Необходимые условия
Центр Интернета вещей.
Зарегистрированное устройство
Если приложение использует протокол MQTT, убедитесь, что порт 8883 открыт в брандмауэре. Протокол MQTT взаимодействует через порт 8883. В некоторых корпоративных и академических сетях этот порт может быть заблокирован. Дополнительные сведения и способы устранения этой проблемы см. в разделе о подключении к Центру Интернета вещей по протоколу MQTT.
- Требуется Visual Studio
Обзор
В этой статье описывается, как использовать Azure IoT SDK для .NET для создания кода приложения устройств и кода серверной службы для прямых сообщений с устройствами.
Создание приложения устройства
Этот раздел описывает, как использовать код приложения устройства для создания прослушивателя обратного вызова метода.
Обязательные пакеты NuGet для устройства
Клиентские приложения устройств, написанные на C#, требуют пакета NuGet Microsoft.Azure.Devices.Client .
Add these using
statements to use the device library.
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности в IoT Hub с помощью следующих методов:
- Общий ключ доступа
- Сертификат X.509
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Проверка подлинности с помощью общего ключа доступа
Класс DeviceClient предоставляет все методы, необходимые для взаимодействия с сообщениями устройства с устройства.
Подключитесь к устройству, используя метод CreateFromConnectionString со строкой подключения устройства и транспортным протоколом подключения.
Параметр CreateFromConnectionString
транспортного протокола TransportType поддерживает следующие транспортные протоколы:
Mqtt
Mqtt_WebSocket_Only
Mqtt_Tcp_Only
Amqp
Amqp_WebSocket_Only
Amqp_Tcp_Only
Http1
Этот пример подключается к устройству с использованием транспортного протокола Mqtt
.
static string DeviceConnectionString = "{IoT hub device connection string}";
static deviceClient = null;
deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString,
TransportType.Mqtt);
Проверка подлинности с помощью сертификата X.509
Чтобы подключить устройство к IoT Hub с помощью сертификата X.509:
Используйте 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
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
For working samples of device X.509 certificate authentication, see:
- Подключение к сертификату X.509
- Тесты на аутентификацию DeviceClientX509
- Управляемый проект – безопасное развертывание и масштабирование устройств Интернета вещей с помощью службы подготовки устройств IoT Hub
Create a direct method callback listener
Use SetMethodHandlerAsync to initialize a direct method callback listener. Слушатель связан с ключевым словом метода, например "перезагрузка". Имя метода можно использовать в Концентраторе Интернета вещей или в серверном приложении для активации метода обратного вызова на устройстве.
This example sets up a callback listener named onReboot
that will trigger when the "reboot" direct method name is called.
try
{
// setup callback for "reboot" method
deviceClient.SetMethodHandlerAsync("reboot", onReboot, null).Wait();
Console.WriteLine("Waiting for reboot method\n Press enter to exit.");
Console.ReadLine();
Console.WriteLine("Exiting...");
// as a good practice, remove the "reboot" handler
deviceClient.SetMethodHandlerAsync("reboot", null, null).Wait();
deviceClient.CloseAsync().Wait();
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine("Error in sample: {0}", ex.Message);
}
Continuing the example, the onReboot
callback method implements the direct method on the device.
Функция обработчика вызывает MethodResponse для отправки подтверждения ответа в вызывающее приложение.
static Task<MethodResponse> onReboot(MethodRequest methodRequest, object userContext)
{
// In a production device, you would trigger a reboot
// scheduled to start after this method returns.
// For this sample, we simulate the reboot by writing to the console
// and updating the reported properties.
try
{
Console.WriteLine("Rebooting!");
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine("Error in sample: {0}", ex.Message);
}
string result = @"{""result"":""Reboot started.""}";
return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
}
Примечание.
Для упрощения, в этой статье не реализуется никакая политика повторных попыток. В рабочем коде следует реализовать политики повторных попыток (например, с экспоненциальной задержкой), как указано в статье Обработка временных сбоев.
Примеры устройств SDK
Пакет SDK Для Интернета вещей Azure для .NET предоставляет рабочие примеры приложений устройств, обрабатывающих задачи прямого метода. Дополнительные сведения см. в разделе:
Создание серверного приложения
В этом разделе описывается, как активировать прямой метод на устройстве.
Класс ServiceClient предоставляет все методы, необходимые для создания серверного приложения для отправки прямых вызовов методов на устройства.
Необходимый для службы пакет NuGet
Приложения сервисного уровня backend требуют пакет NuGet Microsoft.Azure.Devices.
Добавьте эти using
выражения, чтобы использовать библиотеку служб.
using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.
Подключение с помощью политики общего доступа
Подключите серверное приложение с помощью CreateFromConnectionString.
Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.
В качестве параметра CreateFromConnectionString
укажите политику общего доступа к службе . Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
ServiceClient serviceClient;
string connectionString = "{IoT hub service shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к IoT Hub. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Federated identity credential
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. For example, IoT Hub Twin Contributor is required to enable read and write access to a IoT Hub device and module twins. Для получения дополнительной информации см. Управление доступом к IoT Hub с помощью назначения ролей в Azure RBAC.
Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential
или упрощенный вариант ChainedTokenCredential
. Для простоты в этом разделе описывается аутентификация с использованием DefaultAzureCredential
и секрета клиента. Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential
, см. руководство по использованию DefaultAzureCredential.
DefaultAzureCredential
поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных по порядку, пока не найдет работающий вариант.
Microsoft Entra требует эти пакеты NuGet и соответствующие операторы using
:
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
В этом примере секрет клиента приложения, идентификатор клиента Microsoft Entra и идентификатор арендатора добавляются в переменные среды. Эти переменные среды используются DefaultAzureCredential
для проверки подлинности приложения. The result of a successful Microsoft Entra authentication is a security token credential that is passed to an IoT Hub connection method.
string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";
Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);
TokenCredential tokenCredential = new DefaultAzureCredential();
The resulting TokenCredential can then be passed to a connect to IoT Hub method for any SDK client that accepts Microsoft Entra credentials:
В этом примере TokenCredential
передается в ServiceClient.Create
для создания объекта подключения ServiceClient.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
В этом примере TokenCredential
передается в RegistryManager.Create
, чтобы создать объект RegistryManager.
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Пример кода
Для примера работы аутентификации службы Microsoft Entra см. пример аутентификации на основе ролей.
Вызов метода на устройстве
Чтобы вызвать метод на устройстве, выполните приведенные действия.
- Создайте объект CloudToDeviceMethod. Передайте имя прямого метода устройства в качестве параметра.
- Вызовите InvokeDeviceMethodAsync, чтобы вызвать метод на устройстве.
В этом примере вызывается метод "перезагрузка" для запуска перезагрузки на устройстве. The "reboot" method is mapped to a listener on the device as described in the Create a direct method callback listener section of this article.
string targetDevice = "myDeviceId";
CloudToDeviceMethod method = new CloudToDeviceMethod("reboot");
method.ResponseTimeout = TimeSpan.FromSeconds(30);
CloudToDeviceMethodResult response = await serviceClient.InvokeDeviceMethodAsync(targetDevice, method);
Console.WriteLine("Invoked firmware update on device.");
Примеры службы SDK
Пакет SDK Для Интернета вещей Azure для .NET предоставляет рабочие примеры приложений служб, обрабатывающих задачи сообщения. Дополнительные сведения см. в разделе:
- Требуется пакет разработки Java SE 8. Убедитесь, что вы выбрали Java 8 в разделе долгосрочной поддержки , чтобы перейти к скачиванию для JDK 8.
Обзор
В этой статье описывается, как использовать Azure IoT SDK для Java для создания кода приложений для устройств и обратной сервисной службы, используемых для прямых методов взаимодействия с устройствами.
Создание приложения устройства
Этот раздел описывает, как использовать код приложения для устройства, чтобы создать прослушиватель обратного вызова для прямого метода.
Класс DeviceClient предоставляет все методы, необходимые для взаимодействия с прямыми методами на устройстве.
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Device import statements
Используйте следующие инструкции импорта устройств для доступа к пакету SDK Интернета вещей Azure для Java.
import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.exceptions.IotHubClientException;
import com.microsoft.azure.sdk.iot.device.twin.DirectMethodPayload;
import com.microsoft.azure.sdk.iot.device.twin.DirectMethodResponse;
import com.microsoft.azure.sdk.iot.device.twin.MethodCallback;
import com.microsoft.azure.sdk.iot.device.transport.IotHubConnectionStatus;
import com.microsoft.azure.sdk.iot.device.twin.SubscriptionAcknowledgedCallback;
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности в IoT Hub с помощью следующих методов:
- Общий ключ доступа
- Сертификат X.509
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Проверка подлинности с помощью общего ключа доступа
Чтобы подключиться к устройству, выполните приведенные действия.
Используйте 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
Чтобы подключить устройство к IoT Hub с помощью сертификата X.509:
- Создайте объект SSLContext с помощью buildSSLContext.
-
SSLContext
Добавьте сведения в объект ClientOptions. - Call DeviceClient using the
ClientOptions
information to create the device-to-IoT Hub connection.
В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте Environment.GetEnvironmentVariable("PUBLICKEY")
для чтения строковой переменной среды сертификата открытого ключа.
private static final String publicKeyCertificateString =
"-----BEGIN CERTIFICATE-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END CERTIFICATE-----\n";
//PEM encoded representation of the private key
private static final String privateKeyString =
"-----BEGIN EC PRIVATE KEY-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END EC PRIVATE KEY-----\n";
SSLContext sslContext = SSLContextBuilder.buildSSLContext(publicKeyCertificateString, privateKeyString);
ClientOptions clientOptions = ClientOptions.builder().sslContext(sslContext).build();
DeviceClient client = new DeviceClient(connString, protocol, clientOptions);
Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:
- Проверка подлинности удостоверений с помощью сертификатов X.509
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
For working samples of device X.509 certificate authentication, see:
Create a direct method callback listener
Use subscribeToMethods to initialize a direct method callback listener.
subscribeToMethods
прослушивает входящие прямые методы до завершения подключения. The method name and payload is received for each direct method call.
Прослушиватель должен вызвать DirectMethodResponse, чтобы отправить подтверждение ответа метода вызывающему приложению.
Например:
client.subscribeToMethods(
(methodName, methodData, context) ->
{
System.out.println("Received a direct method invocation with name " + methodName + " and payload " + methodData.getPayloadAsJsonString());
return new DirectMethodResponse(200, methodData);
},
null);
System.out.println("Successfully subscribed to direct methods");
Примечание.
Для упрощения, в этой статье не реализуется никакая политика повторных попыток. В рабочем коде следует реализовать политики повторных попыток (например, с экспоненциальной задержкой), как указано в статье Обработка временных сбоев.
Примеры устройств SDK
Пакет SDK Для Интернета вещей Azure для Java содержит рабочий пример для тестирования концепций приложения устройства, описанных в этой статье. Дополнительные сведения см. в примере прямого метода.
Создание серверного приложения
В этом разделе описывается, как инициировать удаленную перезагрузку на устройстве с помощью прямого метода.
Класс ServiceClient
DeviceMethod содержит методы, которые службы могут использовать для доступа к прямым методам.
Service import statements
Используйте следующие инструкции импорта служб для доступа к пакету SDK Интернета вещей Azure для Java.
import com.microsoft.azure.sdk.iot.service.methods.DirectMethodRequestOptions;
import com.microsoft.azure.sdk.iot.service.methods.DirectMethodsClient;
import com.microsoft.azure.sdk.iot.service.methods.DirectMethodResponse;
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.
Подключение с помощью политики общего доступа
Use the DeviceMethod constructor to add the service primary connection string and connect to IoT Hub.
Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.
В качестве параметра конструктору DeviceMethod
предоставьте политику общего доступа службы . Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
Например:
String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
DeviceMethod methodClient = new DeviceMethod(iotHubConnectionString);
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к IoT Hub. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Обзор аутентификации Java SDK см. в разделе Аутентификация Azure с использованием Java и Azure Identity.
Для простоты в этом разделе рассматривается описание проверки подлинности с помощью секрета клиента.
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Federated identity credential
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. For example, IoT Hub Twin Contributor is required to enable read and write access to a IoT Hub device and module twins. Для получения дополнительной информации см. Управление доступом к IoT Hub с помощью назначения ролей в Azure RBAC.
Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential
или упрощенный вариант ChainedTokenCredential
.
Для получения дополнительной информации о преимуществах и недостатках использования DefaultAzureCredential
см. в разделе Цепочки учетных данных в библиотеке клиента Azure Identity для Java.
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Оно пытается использовать несколько типов учетных данных в определенном порядке, пока не найдет подходящие учетные данные.
Идентификацию учетных данных приложения Microsoft Entra можно выполнить, используя DefaultAzureCredentialBuilder. Save connection parameters such as client secret tenantID, clientID, and client secret values as environmental variables. Once the TokenCredential
is created, pass it to ServiceClient or other builder as the 'credential' parameter.
В этом примере DefaultAzureCredentialBuilder
пытается выполнить проверку подлинности подключения из списка, описанного в defaultAzureCredential. The result of a successful Microsoft Entra authentication is a security token credential that is passed to a constructor such as ServiceClient.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Проверка подлинности с помощью ClientSecretCredentialBuilder
С помощью ClientSecretCredentialBuilder можно создать учетные данные с помощью сведений о секрете клиента. В случае успешного выполнения этот метод возвращает TokenCredential, который можно передать ServiceClient или другому объекту-строителю в качестве параметра 'credential'.
В этом примере в переменные среды добавлены секрет клиента, идентификатор клиента и идентификатор арендатора для регистрации приложений Microsoft Entra. These environment variables are used by ClientSecretCredentialBuilder
to build the credential.
string clientSecretValue = System.getenv("AZURE_CLIENT_SECRET");
string clientID = System.getenv("AZURE_CLIENT_ID");
string tenantID = System.getenv("AZURE_TENANT_ID");
TokenCredential credential =
new ClientSecretCredentialBuilder()
.tenantId(tenantID)
.clientId(clientID)
.clientSecret(clientSecretValue)
.build();
Другие классы проверки подлинности
Пакет SDK для Java также включает следующие классы, которые проходят проверку подлинности серверного приложения с помощью Microsoft Entra:
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
Примеры кода
Примеры работы аутентификации в службе Microsoft Entra см. в разделе Пример аутентификации на основе ролей.
Вызов метода на устройстве
Вызов DeviceMethod.invoke для вызова метода на устройстве и возврата состояния результата.
The invoke
payload parameter is optional. Use null
if there is no payload supplied. Параметр полезных данных может принимать различные формы данных, включая строку, массив байтов и хэш-таблицу. Примеры см. в разделе "Тесты прямых методов".
В этом примере вызывается метод "перезагрузка" для запуска перезагрузки на устройстве. The "reboot" method is mapped to a listener on the device as described in the Create a direct method callback listener section of this article.
Например:
String deviceId = "myFirstDevice";
String methodName = "reboot";
String payload = "Test payload";
Long responseTimeout = TimeUnit.SECONDS.toSeconds(30);
Long connectTimeout = TimeUnit.SECONDS.toSeconds(5);
MethodResult result = methodClient.invoke(deviceId, methodName, responseTimeout, connectTimeout, payload);
if (result == null)
{
throw new IOException("Method invoke returns null");
}
System.out.println("Status=" + result.getStatus());
Примеры службы SDK
Пакет SDK Для Интернета вещей Azure для Java предоставляет рабочий пример приложений служб, обрабатывающих задачи прямого метода. Дополнительные сведения см. в разделе:
- Рекомендуется использовать пакет SDK для Python версии 3.7 или более поздней версии. Обязательно используйте 32-разрядную или 64-разрядную версию установки согласно требованиям программы настройки. При появлении запроса во время установки обязательно добавьте Python в переменную среды соответствующей платформы.
Обзор
This article describes how to use the Azure IoT SDK for Python to create device and backend service application code for device direct methods.
Установка пакетов
Для создания приложений устройств необходимо установить библиотеку azure-iot-device .
pip install azure-iot-device
Для создания внутренних приложений службы необходимо установить библиотеку Azure-iot-hub.
pip install azure-iot-hub
Создание приложения устройства
Этот раздел описывает, как использовать код приложения устройства для создания слушателя обратных вызовов прямого метода.
Класс IoTHubDeviceClient содержит методы, которые можно использовать для работы с прямыми методами.
Документ о импорте устройства
Добавьте этот оператор импорта для доступа к IoTHubDeviceClient
и MethodResponse
.
# import the device client library
from azure.iot.device import IoTHubDeviceClient, MethodResponse
Подключение к устройству
Приложение устройства может пройти проверку подлинности в IoT Hub с помощью следующих методов:
- Общий ключ доступа
- Сертификат X.509
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Проверка подлинности с помощью общего ключа доступа
Используйте create_from_connection_string для подключения приложения к устройству с помощью строки подключения устройства.
# substitute the device connection string in conn_str
# and add it to the IoTHubDeviceClient object
conn_str = "{IoT hub device connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(conn_str)
Проверка подлинности с помощью сертификата X.509
Чтобы подключить устройство к IoT Hub с помощью сертификата X.509:
- Добавление параметров сертификата X.509 с помощью create_from_x509_certificate
- Call connect to connect the device client
В этом примере показаны значения входных параметров сертификата в качестве локальных переменных для ясности. В рабочей системе храните конфиденциальные входные параметры в переменных среды или другом безопасном расположении хранилища. Например, используйте os.getenv("HOSTNAME")
для чтения переменной среды имени узла.
# The Azure IoT hub name
hostname = "xxxxx.azure-devices.net"
# The device that has been created on the portal using X509 CA signing or self-signing capabilities
device_id = "MyDevice"
# The X.509 certificate file name
cert_file = "~/certificates/certs/sensor-thl-001-device.cert.pfx"
key_file = "~/certificates/certs/sensor-thl-001-device.cert.key"
# The optional certificate pass phrase
pass_phrase = "1234"
x509 = X509(
cert_file,
key_file,
pass_phrase,
)
# The client object is used to interact with your Azure IoT hub.
device_client = IoTHubDeviceClient.create_from_x509_certificate(
hostname=hostname, device_id=device_id, x509=x509
)
# Connect to IoT Hub
await device_client.connect()
Дополнительные сведения о проверке подлинности сертификатов см. в следующем разделе:
- Проверка подлинности удостоверений с помощью сертификатов X.509
- Руководство. Создание и отправка сертификатов для тестирования
Примеры кода
For working samples of device X.509 certificate authentication, see the examples whose file names end in x509 at Async hub scenarios.
Create a direct method callback
Используйте on_method_request_received для создания функции обработчика или корутины, вызываемой при получении прямого метода. Слушатель связан с ключевым словом метода, например "перезагрузка". Имя метода можно использовать в Концентраторе Интернета вещей или в серверном приложении для активации метода обратного вызова на устройстве.
The handler function should create a MethodResponse and pass it to send_method_response to send a direct method response acknowledgment to the calling application.
В этом примере настраивается обработчик прямых методов с именем method_request_handler
.
try:
# Attach the handler to the client
client.on_method_request_received = method_request_handler
except:
# In the event of failure, clean up
client.shutdown()
В этом примере метод обратного вызова method_request_handler
реализует прямой метод на устройстве. Код выполняется при вызове прямого метода rebootDevice из приложения-службы. Метод вызывает send_method_response
, чтобы отправить подтверждение получения прямого метода вызывающему приложению.
# Define the handler for method requests
def method_request_handler(method_request):
if method_request.name == "rebootDevice":
# Act on the method by rebooting the device
print("Rebooting device")
time.sleep(20)
print("Device rebooted")
# Create a method response indicating the method request was resolved
resp_status = 200
resp_payload = {"Response": "This is the response from the device"}
method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)
else:
# Create a method response indicating the method request was for an unknown method
resp_status = 404
resp_payload = {"Response": "Unknown method"}
method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)
# Send the method response
client.send_method_response(method_response)
Примеры устройств SDK
Образец SDK Azure IoT для Python предоставляет рабочий пример устройства, обрабатывающего задачи прямого метода. For more information, see Receive direct method.
Создание серверного приложения
В этом разделе описывается, как использовать бэкенд-приложение для вызова прямого метода на устройстве.
Класс IoTHubRegistryManager предоставляет все методы, необходимые для создания серверного приложения для отправки сообщений на устройство.
Service import statements
Добавьте эти инструкции импорта для подключения к Центру IoT, отправки методов облачного взаимодействия с устройством и получения ответов на прямые методы от устройства.
from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.models import CloudToDeviceMethod, CloudToDeviceMethodResult
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.
Подключение с помощью политики общего доступа
Подключитесь к Центру Интернета вещей с помощью from_connection_string.
Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.
В качестве параметра from_connection_string
укажите политику общего доступа к службе . Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
Например:
# Connect to IoT hub
IOTHUB_CONNECTION_STRING = "{IoT hub service connection string}"
iothub_registry_manager = IoTHubRegistryManager.from_connection_string(IOTHUB_CONNECTION_STRING)
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к IoT Hub. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Общие сведения о проверке подлинности пакета SDK для Python см. в статье "Проверка подлинности приложений Python в службах Azure с помощью пакета SDK Azure для Python"
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Federated identity credential
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. For example, IoT Hub Twin Contributor is required to enable read and write access to a IoT Hub device and module twins. Для получения дополнительной информации см. Управление доступом к IoT Hub с помощью назначения ролей в Azure RBAC.
Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential
или упрощенный вариант ChainedTokenCredential
. Для простоты в этом разделе описывается аутентификация с использованием DefaultAzureCredential
и секрета клиента. Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential
см. в разделе «Цепочки учетных данных» в клиентской библиотеке удостоверений Azure для Python.
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. It attempts to use multiple credential types in an order until it finds a working credential.
Для Microsoft Entra требуется этот пакет импорта и соответствующая import
инструкция:
pip install azure-identity
from azure.identity import DefaultAzureCredential
В этом примере секрет клиента, идентификатор клиента и идентификатор арендатора для регистрации приложения Microsoft Entra были добавлены в переменные среды. Эти переменные среды используются DefaultAzureCredential
для проверки подлинности приложения. The result of a successful Microsoft Entra authentication is a security token credential that is passed to an IoT Hub connection method.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
Полученный AccessToken затем может быть передан в from_token_credential
, чтобы подключиться к IoT Hub для любого клиента SDK, который поддерживает учетные данные Microsoft Entra.
- IoTHubRegistryManager to create a service connection to IoT Hub using an Entra token credential.
- 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
для создания подключения к IoT Hub.
import sys
import os
from azure.identity import DefaultAzureCredential
from azure.iot.hub import IoTHubRegistryManager
# Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'
# Set environment variables
os.environ['AZURE_CLIENT_SECRET'] = clientSecretValue
os.environ['AZURE_CLIENT_ID'] = clientID
os.environ['AZURE_TENANT_ID'] = tenantID
# Acquire a credential object
credential = DefaultAzureCredential()
# Use Entra to authorize IoT Hub service
print("Connecting to IoTHubRegistryManager...")
iothub_registry_manager = IoTHubRegistryManager.from_token_credential(
url="MyAzureDomain.azure-devices.net",
token_credential=credential)
Примеры кода
Рабочие примеры проверки подлинности службы Microsoft Entra см. в разделе "Библиотека проверки подлинности Майкрософт" (MSAL) для Python.
Вызов метода на устройстве
Можно вызвать прямой метод по имени на устройстве. Имя метода определяет метод. In the following and previous device example shown in Create a direct method callback, the direct method name is "rebootDevice".
Чтобы вызвать прямой метод на устройстве, сделайте следующее:
- Создайте объект CloudToDeviceMethod. Supply the method name and payload as parameters.
- Вызовите invoke_device_method для вызова прямого метода на устройстве. Укажите идентификатор устройства и
CloudToDeviceMethod
объект полезных данных в качестве параметров.
This example calls CloudToDeviceMethod
to invoke a direct method named "rebootDevice" on a device. After the direct method is successfully invoked, the direct method response payload is displayed.
CONNECTION_STRING = "{IoTHubConnectionString}"
DEVICE_ID = "{deviceId}"
METHOD_NAME = "rebootDevice"
METHOD_PAYLOAD = "{\"method_number\":\"42\"}"
TIMEOUT = 60
WAIT_COUNT = 10
try:
print ( "" )
print ( "Invoking device to reboot..." )
# Call the direct method.
deviceMethod = CloudToDeviceMethod(method_name=METHOD_NAME, payload=METHOD_PAYLOAD)
response = registry_manager.invoke_device_method(DEVICE_ID, deviceMethod)
print ( "Successfully invoked the device to reboot." )
print ( "The device has returned this payload:" )
print ( response.payload )
except Exception as ex:
print ( "" )
print ( "Unexpected error {0}".format(ex) )
return
Примеры службы SDK
Пакет SDK Для Интернета вещей Azure для Python предоставляет рабочие примеры приложений служб, обрабатывающих задачи прямого метода. Дополнительные сведения см. в разделе:
- Требуется Node.js версии 10.0.x или более поздней
Обзор
В этой статье описывается, как использовать Azure IoT SDK для Node.js для создания кода приложений устройств и серверных служб для прямых методов устройств.
Создание приложения устройства
В этом разделе описывается, как использовать код приложения устройства для создания обратного вызова метода.
Установка пакета SDK
Пакет azure-iot-device содержит объекты, которые интерфейсирует с устройствами Интернета вещей. Выполните следующую команду, чтобы установить пакет SDK для устройств Azure-iot-device на компьютере разработки:
npm install azure-iot-device --save
Подключение устройства к Центру Интернета вещей
Приложение устройства может пройти проверку подлинности в IoT Hub с помощью следующих методов:
- Сертификат X.509
- Общий ключ доступа
Внимание
В этой статье содержатся шаги по подключению устройства с помощью сигнатуры совместного доступа, также называемой аутентификацией с использованием симметричного ключа. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.
Проверка подлинности с помощью сертификата X.509
The X.509 certificate is attached to the device-to-IoT Hub connection transport.
Чтобы настроить подключение устройства к IoT-хабу, используя сертификат X.509:
Вызовите fromConnectionString, чтобы добавить строку подключения устройства или модуля идентификации и тип транспортировки в объект
Client
. Добавьтеx509=true
в строку подключения, чтобы указать, что сертификат добавляется кDeviceClientOptions
. Например:A device connection string:
HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true
Строка подключения модуля идентификации:
HostName=xxxxx.azure-devices.net;DeviceId=Device-1;ModuleId=Module-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true
Настройте переменную JSON с сведениями о сертификате и передайте ее в DeviceClientOptions.
Call setOptions to add an X.509 certificate and key (and optionally, passphrase) to the client transport.
Вызовите 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 минут). Mqtt
MqttWs
AmqpWs
Установите необходимые транспортные протоколы на компьютере разработки.
Например, эта команда устанавливает Amqp
протокол:
npm install azure-iot-device-amqp --save
Дополнительные сведения о различиях между MQTT, AMQP и HTTPS см. в статьях Руководство по обмену данными между облаком и устройством и Выбор протокола связи.
Создание клиентского объекта
Client
Создайте объект с помощью установленного пакета.
Например:
const Client = require('azure-iot-device').Client;
Создание объекта протокола
Protocol
Создайте объект с помощью установленного транспортного пакета.
В этом примере назначается протокол AMQP:
const Protocol = require('azure-iot-device-amqp').Amqp;
Добавьте строку подключения устройства и транспортный протокол
Вызов изConnectionString для предоставления параметров подключения устройства:
- connStr — строка подключения устройства.
- transportCtor — транспортный протокол.
В этом примере используется транспортный Amqp
протокол:
const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Откройте подключение к IoT Hub
Используйте метод open, чтобы открыть подключение между устройством Интернета вещей и Центром Интернета вещей.
Например:
client.open(function(err) {
if (err) {
console.error('error connecting to hub: ' + err);
process.exit(1);
}
})
Create a direct method callback
Call onDeviceMethod to create a callback handler function or coroutine that is called when a direct method is received. Слушатель связан с ключевым словом метода, например "перезагрузка". Имя метода можно использовать в Концентраторе Интернета вещей или в серверном приложении для активации метода обратного вызова на устройстве.
Функция обработчика обратного вызова должна вызываться response.send
для отправки сообщения подтверждения ответа в вызывающее приложение.
This example sets up a direct method handler named onReboot
that is called when the "reboot" direct method name is used.
client.onDeviceMethod('reboot', onReboot);
В этом примере метод обратного вызова onReboot
реализует прямой метод на устройстве. Код выполняется при вызове прямого метода перезагрузки из приложения-службы. Для отправки сообщения подтверждения ответа вызывающему приложению вызывается функция response.send
.
var onReboot = function(request, response) {
// Respond the cloud app for the direct method
response.send(200, 'Reboot started', function(err) {
if (err) {
console.error('An error occurred when sending a method response:\n' + err.toString());
} else {
console.log('Response to method \'' + request.methodName + '\' sent successfully.');
}
});
// Add your device's reboot API for physical restart.
console.log('Rebooting!');
};
Примеры устройств SDK
Пакет SDK Для Интернета вещей Azure для Node.js предоставляет рабочие примеры приложений устройств, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе:
Создание серверного приложения
В этом разделе описывается, как вызвать прямой метод на устройстве.
Install service SDK package
Выполните следующую команду, чтобы установить azure-iothub на компьютере разработки:
npm install azure-iothub --save
Подключение к Центру Интернета вещей
Вы можете подключить серверную службу к Центр Интернета вещей с помощью следующих методов:
- Политика общего доступа
- Microsoft Entra
Внимание
В этой статье содержатся шаги по подключению к службе с помощью подписанного URL-адреса. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности в службе с помощью идентификатора Microsoft Entra или управляемых удостоверений является более безопасным подходом. Дополнительные сведения см. в рекомендациях по безопасности решений > Интернета вещей Cloud Security.
Подключение с помощью политики общего доступа
Используйте fromConnectionString для подключения к Центру Интернета вещей.
Чтобы вызвать прямой метод на устройстве через Центр Интернета вещей, службе требуется разрешение service connect. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой службой, которая предоставляет это разрешение.
В качестве параметра для CreateFromConnectionString
укажите строку подключения политики общего доступа службы. Дополнительные сведения о политиках общего доступа см. в статье "Управление доступом к Центр Интернета вещей с помощью подписанных URL-адресов".
var Client = require('azure-iothub').Client;
var connectionString = '{IoT hub shared access policy connection string}';
var client = Client.fromConnectionString(connectionString);
Подключение с помощью Microsoft Entra
Серверное приложение, использующее Microsoft Entra, должно успешно пройти проверку подлинности и получить учетные данные токена безопасности перед подключением к IoT Hub. Этот токен передается методу подключения Центра Интернета вещей. Общие сведения о настройке и использовании Microsoft Entra для Центр Интернета вещей см. в разделе "Управление доступом к Центр Интернета вещей с помощью идентификатора Microsoft Entra".
Общие сведения о проверке подлинности пакета SDK для Node.js см. в следующих статье:
- Начало работы с проверкой подлинности пользователей в Azure
- Azure Identity client library for JavaScript
Настройка приложения Microsoft Entra
Необходимо настроить приложение Microsoft Entra с учетными данными проверки подлинности по вашему выбору. Приложение содержит такие параметры, как секрет клиента, используемый серверным приложением для проверки подлинности. Доступные конфигурации проверки подлинности приложений:
- Секрет клиента
- Сертификат
- Federated identity credential
Приложения Microsoft Entra могут требовать определенные разрешения ролей в зависимости от выполняемых операций. For example, IoT Hub Twin Contributor is required to enable read and write access to a IoT Hub device and module twins. Для получения дополнительной информации см. Управление доступом к IoT Hub с помощью назначения ролей в Azure RBAC.
Для получения дополнительной информации о настройке приложения Microsoft Entra см. Краткое руководство: Регистрация приложения на платформе идентификации Microsoft.
Проверка подлинности с помощью DefaultAzureCredential
Самый простой способ использовать Microsoft Entra для проверки подлинности серверного приложения — это использовать DefaultAzureCredential, но в рабочей среде рекомендуется использовать другой метод, включая определенный TokenCredential
или упрощенный вариант ChainedTokenCredential
. Для простоты в этом разделе описывается аутентификация с использованием DefaultAzureCredential
и секрета клиента.
Дополнительные сведения о преимуществах и недостатках использования DefaultAzureCredential
см. в разделе "Цепочки учетных данных" в клиентской библиотеке удостоверений Azure для JavaScript
DefaultAzureCredential поддерживает различные механизмы проверки подлинности и определяет соответствующий тип учетных данных в зависимости от среды, в которой он выполняется. Он пытается использовать несколько типов учетных данных по порядку, пока не найдет работающий.
Для Microsoft Entra требуется этот пакет:
npm install --save @azure/identity
В этом примере секрет клиента, идентификатор клиента и идентификатор арендатора для регистрации приложения Microsoft Entra были добавлены в переменные среды. Эти переменные среды используются DefaultAzureCredential
для проверки подлинности приложения. The result of a successful Microsoft Entra authentication is a security token credential that is passed to an IoT Hub connection method.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
The resulting credential token can then be passed to fromTokenCredential to connect to IoT Hub for any SDK client that accepts Microsoft Entra credentials:
fromTokenCredential
требуется два параметра:
- URL-адрес службы Azure— URL-адрес службы Azure должен находиться в формате
{Your Entra domain URL}.azure-devices.net
безhttps://
префикса. Например,MyAzureDomain.azure-devices.net
. - Токен учетных данных Azure
В этом примере учетные данные Azure получаются с помощью DefaultAzureCredential
. The Azure domain URL and credential are then supplied to Registry.fromTokenCredential
to create the connection to IoT Hub.
const { DefaultAzureCredential } = require("@azure/identity");
let Registry = require('azure-iothub').Registry;
// Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'
// Set environment variables
process.env['AZURE_CLIENT_SECRET'] = clientSecretValue;
process.env['AZURE_CLIENT_ID'] = clientID;
process.env['AZURE_TENANT_ID'] = tenantID;
// Acquire a credential object
const credential = new DefaultAzureCredential()
// Create an instance of the IoTHub registry
hostName = 'MyAzureDomain.azure-devices.net';
let registry = Registry.fromTokenCredential(hostName,credential);
Примеры кода
Чтобы ознакомиться с рабочими примерами проверки подлинности службы Microsoft Entra, см. Примеры удостоверений Azure.
Вызов метода на устройстве
Используйте invokeDeviceMethod для вызова прямого метода по имени на устройстве. Параметр имени метода определяет прямой метод.
В этом примере вызывается метод "перезагрузка" для запуска перезагрузки на устройстве. The "reboot" method is mapped to a callback handler function on the device as described in the Create a direct method callback section of this article.
var startRebootDevice = function(deviceToReboot) {
var methodName = "reboot";
var methodParams = {
methodName: methodName,
payload: null,
timeoutInSeconds: 30
};
client.invokeDeviceMethod(deviceToReboot, methodParams, function(err, result) {
if (err) {
console.error("Direct method error: "+err.message);
} else {
console.log("Successfully invoked the device to reboot.");
}
});
};
Примеры службы SDK
Пакет SDK Для Интернета вещей Azure для Node.js предоставляет рабочие примеры приложений служб, которые обрабатывают задачи управления устройствами. Дополнительные сведения см. в разделе: