Prise en main des identités de module IoT Hub et des jumeaux d’identité de module
Les identités de module et les jumeaux d’identité de module sont similaires aux identités d’appareil et aux jumeaux d’appareil Azure IoT Hub, mais offrent une meilleure granularité. Contrairement aux identités d’appareil et aux jumeaux d’appareil Azure IoT Hub qui permettent à l’application back-end de configurer un appareil et d’obtenir une visibilité sur les conditions de l’appareil, une identité de module et un jumeau d’identité de module fournissent ces capacités pour les composants individuels d’un appareil. Sur les appareils compatibles qui intègrent plusieurs composants, par exemple des appareils basés sur un système d’exploitation ou des appareils avec un microprogramme, les identités de module et les jumeaux d’identité de module permettent d’isoler la configuration et les conditions de chacun de ces composants. Pour plus d'informations, consultez Comprendre les jumeaux de module Azure IoT Hub.
Remarque
Les fonctionnalités décrites dans cet article sont uniquement disponibles au niveau Standard d’IoT Hub. Pour plus d’informations sur les niveaux de base et standard/gratuit d’IoT Hub, consultez Choisir le niveau IoT Hub correspondant à votre solution.
Cet article explique comment développer deux types d’applications :
- Applications d’appareil qui affichent et mettent à jour les propriétés signalées du jumeau d’identité de module et gèrent les demandes de mise à jour des propriétés souhaitées.
- Applications de service qui peuvent lire et définir les propriétés souhaitées de l’identité de module.
Remarque
Cet article est destiné à compléter les exemples de SDK Azure IoT référencés à partir de cet article. Vous pouvez utiliser des outils SDK pour créer des applications d’appareil et de back-end.
Prérequis
Un hub IoT
Un appareil IoT Hub
Une identité de module d’appareil IoT Hub
Si votre application utilise le protocole MQTT, assurez-vous que port 8883 est ouvert dans votre pare-feu. Le protocole MQTT communique sur le port 8883. Ce port peut être bloqué dans certains environnements réseau professionnels et scolaires. Pour plus d’informations sur les différentes façons de contourner ce problème, consultez Connexion à IoT Hub (MQTT).
- Nécessite Visual Studio
Vue d’ensemble
Cet article décrit comment utiliser les Kits de développement logiciel (SDK) Azure IoT pour .NET afin de créer du code d’application de service back-end et d’appareil pour les jumeaux d’identité de module.
Créer une application d’appareil
Cette section explique comment utiliser le code d’application d’appareil pour :
- Récupérer un jumeau d’identité de module et examiner les propriétés signalées
- Mettre à jour les propriétés du jumeau d’identité de module signalées
- Créer un gestionnaire de rappel de mise à jour de propriété souhaitée du module
Important
Cet article comprend les étapes à suivre pour connecter un appareil en utilisant une signature d’accès partagé, également appelée « authentification par clé symétrique ». Cette méthode d’authentification est pratique pour les tests et les évaluations, mais l’authentification d’un appareil en utilisant des certificats X.509 est une approche plus sécurisée. Pour plus d’informations, consultez Meilleures pratiques de sécurité > Sécurité des connexions.
Package NuGet d’appareil nécessaire
Les applications clientes d’appareil écrites en C# nécessitent le package NuGet Microsoft.Azure.Devices.Client.
Ajoutez ces instructions using
pour utiliser la bibliothèque d’appareils.
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
Connexion à un appareil
La classe ModuleClient expose toutes les méthodes nécessaires pour interagir avec les jumeaux d’identité de module à partir de l’appareil.
Connectez-vous à l’appareil à l’aide de la méthode CreateFromConnectionString avec la chaîne de connexion d’identité du module.
L’appel de CreateFromConnectionString
sans paramètre de transport se connecte à l’aide du transport AMQP par défaut.
Cet exemple se connecte à l’appareil à l’aide du transport AMQP par défaut.
static string ModuleConnectionString = "{Device module identity connection string}";
private static ModuleClient _moduleClient = null;
_moduleClient = ModuleClient.CreateFromConnectionString(ModuleConnectionString, null);
Récupérer un jumeau d’identité de module et examiner les propriétés
Appelez GetTwinAsync pour récupérer les propriétés actuelles du jumeau d’identité de module dans un objet Twin.
Cet exemple récupère et affiche les propriétés du jumeau d’identité de module au format JSON.
Console.WriteLine("Retrieving twin...");
Twin twin = await _moduleClient.GetTwinAsync();
Console.WriteLine("\tModule identity twin value received:");
Console.WriteLine(JsonConvert.SerializeObject(twin.Properties));
Mettre à jour les propriétés signalées du jumeau d’identité de module
Pour mettre à jour une propriété signalée de jumeau :
- Créez un objet TwinCollection pour la mise à jour de propriété signalée
- Mettez à jour une ou plusieurs propriétés signalées dans l’objet
TwinCollection
- Utilisez UpdateReportedPropertiesAsync pour envoyer (push) les modifications de propriété signalées au service IoT Hub
Par exemple :
try
{
Console.WriteLine("Sending sample start time as reported property");
TwinCollection reportedProperties = new TwinCollection();
reportedProperties["DateTimeLastAppLaunch"] = DateTime.UtcNow;
await _moduleClient.UpdateReportedPropertiesAsync(reportedProperties);
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine("Error in sample: {0}", ex.Message);
}
Créer un gestionnaire de rappel de mise à jour de propriété souhaitée
Passez le nom de méthode du gestionnaire de rappel à SetDesiredPropertyUpdateCallbackAsync pour créer un gestionnaire de rappel de mise à jour de propriété souhaité qui s’exécute lorsqu’une propriété souhaitée est modifiée dans le jumeau d’identité du module.
Par exemple, cet appel configure le système pour notifier une méthode nommée OnDesiredPropertyChangedAsync
chaque fois qu’une propriété de module souhaitée est modifiée.
await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChangedAsync, null);
Les propriétés de jumeau d’identité de module sont passées à la méthode de rappel en tant que TwinCollection et peuvent être examinées comme des structures KeyValuePair
.
Cet exemple reçoit les mises à jour de propriété souhaitées sous la forme de TwinCollection
, puis effectue une boucle et imprime les mises à jour de collection KeyValuePair
. Après avoir effectué une boucle dans la collection KeyValuePair
, le code appelle UpdateReportedPropertiesAsync
pour mettre à jour la propriété signalée DateTimeLastDesiredPropertyChangeReceived
pour conserver la dernière heure de mise à jour.
private async Task OnDesiredPropertyChangedAsync(TwinCollection desiredProperties, object userContext)
{
var reportedProperties = new TwinCollection();
Console.WriteLine("\tDesired properties requested:");
Console.WriteLine($"\t{desiredProperties.ToJson()}");
// For the purpose of this sample, we'll blindly accept all twin property write requests.
foreach (KeyValuePair<string, object> desiredProperty in desiredProperties)
{
Console.WriteLine($"Setting {desiredProperty.Key} to {desiredProperty.Value}.");
reportedProperties[desiredProperty.Key] = desiredProperty.Value;
}
Console.WriteLine("\tAlso setting current time as reported property");
reportedProperties["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.UtcNow;
await _moduleClient.UpdateReportedPropertiesAsync(reportedProperties);
}
Exemple de module de Kit de développement logiciel (SDK)
Le Kit de développement logiciel (SDK) Azure IoT pour .NET fournit des exemples fonctionnels d’applications d’appareil qui gèrent les tâches de jumeau d’identité de module. Pour plus d’informations, consultez l’article suivant :
Créer une application back-end
Cette section explique comment lire et mettre à jour les champs d’identité du module.
La classe RegistryManager expose toutes les méthodes nécessaires pour créer une application back-end pour interagir avec des jumeaux d’identité de module à partir du service.
Package NuGet de service nécessaire
Les applications de service principal nécessitent le package NuGet Microsoft.Azure.Devices.
Ajoutez ces instructions using
pour utiliser la bibliothèque de service.
using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;
Connexion à IoT Hub
Vous pouvez connecter un service back-end à IoT Hub à l’aide des méthodes suivantes :
- Stratégie d’accès partagé
- Microsoft Entra
Important
Cet article comprend les étapes à suivre pour se connecter à un service à l’aide d’une signature d’accès partagé. Cette méthode d’authentification est pratique pour les tests et les évaluations, mais l’authentification à un service avec Microsoft Entra ID ou des identités managées est une approche plus sécurisée. Pour plus d’informations, consultez Meilleures pratiques de sécurité > Sécurité du cloud.
Se connecter à l’aide d’une stratégie d’accès partagé
Connectez une application back-end à IoT Hub à l’aide de CreateFromConnectionString.
La méthode UpdateModuleAsync
utilisée dans cette section nécessite l’autorisation de stratégie d'accès partagé Service Connect pour ajouter les propriétés souhaitées à un module. En tant que paramètre pour CreateFromConnectionString
, fournissez une chaîne de connexion de stratégie d’accès partagé qui inclut l’autorisation Service Connect. Pour plus d’informations sur les stratégies d’accès partagé, consultez Contrôler l’accès à IoT Hub avec des signatures d’accès partagé.
Par exemple :
static RegistryManager registryManager;
static string connectionString = "{IoT hub shared access policy connection string}";
registryManager = RegistryManager.CreateFromConnectionString(connectionString);
Se connecter à l’aide de Microsoft Entra
Une application back-end qui utilise Microsoft Entra doit s’authentifier et obtenir des informations d’identification de jeton de sécurité avant de se connecter à IoT Hub. Ce jeton est passé à une méthode de connexion IoT Hub. Pour obtenir des informations générales sur la configuration et l’utilisation de Microsoft Entra pour IoT Hub, consultez Contrôler l’accès à IoT Hub à l’aide de Microsoft Entra ID.
Configurer l’application Microsoft Entra
Vous devez configurer une application Microsoft Entra configurée pour vos informations d’identification d’authentification préférées. L’application contient des paramètres tels que la clé secrète client utilisée par l’application back-end pour s’authentifier. Les configurations d’authentification d’application disponibles sont les suivantes :
- Clè secrète client
- Certificat
- Informations d’identification d’identité fédérée
Les applications Microsoft Entra peuvent nécessiter des autorisations de rôle spécifiques en fonction des opérations effectuées. Par exemple, le Contributeur de jumeaux IoT Hub est nécessaire pour activer l’accès en lecture et en écriture à un appareil IoT Hub et à des jumeaux de module. Pour plus d’informations, consultez Gérer l’accès à IoT Hub à l’aide de l’attribution de rôle RBAC Azure.
Pour plus d’informations concernant la configuration d’une application Microsoft Entra, consultez Démarrage rapide : inscrire une application auprès de la plateforme d’identités Microsoft.
S’authentifier à l’aide de DefaultAzureCredential
Le moyen le plus simple d’utiliser Microsoft Entra pour authentifier une application back-end consiste à utiliser DefaultAzureCredential. Cependant, il est recommandé d’utiliser une autre méthode dans un environnement de production, y compris des TokenCredential
spécifiques ou des ChainedTokenCredential
simplifiées. Par souci de simplicité, cette section décrit l’authentification à l’aide de DefaultAzureCredential
et de la clé secrète client. Pour plus d’informations sur les avantages et les inconvénients de l’utilisation de DefaultAzureCredential
, consultez Conseils d’utilisation pour DefaultAzureCredential.
DefaultAzureCredential
prend en charge différents mécanismes d’authentification et détermine le type d’informations d’identification approprié en fonction de l’environnement dans lequel il s’exécute. Cette méthode tente d’utiliser plusieurs types d’informations d’identification dans un ordre jusqu’à ce qu’elle trouve des informations d’identification fonctionnelles.
Microsoft Entra nécessite ces packages NuGet et les instructions using
correspondantes :
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
Dans cet exemple, la clé secrète client d’inscription de l’application Microsoft Entra, l’ID client et l’ID de locataire sont ajoutés aux variables d’environnement. Ces variables d’environnement sont utilisées par DefaultAzureCredential
pour authentifier l’application. Le résultat d’une authentification Microsoft Entra réussie est une information d’identification de jeton de sécurité passée à une méthode de connexion IoT Hub.
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();
Le TokenCredential résultant peut ensuite être passé pour se connecter à une méthode IoT Hub pour n’importe quel client du Kit de développement logiciel (SDK) qui accepte les informations d’identification Microsoft Entra :
Dans cet exemple, TokenCredential
est passé à ServiceClient.Create
pour créer un objet de connexion ServiceClient.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
Dans cet exemple, TokenCredential
est passé à RegistryManager.Create
pour créer un objet RegistryManager.
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Exemple de code
Pour obtenir un exemple fonctionnel de l’authentification du service Microsoft Entra, consultez Exemple d’authentification basée sur les rôles.
Lire et mettre à jour les champs d’identité du module
Appelez GetModuleAsync pour récupérer les champs de jumeau d’identité de module actuel dans un objet Module.
La classe Module
inclut properties
qui correspondent aux sections d’un jumeau d’identité de module. Utilisez les propriétés de classe Module pour afficher et mettre à jour les champs de jumeau d’identité de module. Vous pouvez utiliser les propriétés de l’objet Module
pour mettre à jour plusieurs champs avant d’écrire les mises à jour sur l’appareil à l’aide de UpdateModuleAsync
.
Après avoir effectué des mises à jour de champ de jumeau d’identité de module, appelez UpdateModuleAsync pour écrire des mises à jour de champ d’objet Module
sur un appareil. Utilisez la logique try
et catch
avec un gestionnaire d’erreurs pour intercepter les erreurs de correctif mal mis en forme à partir de UpdateModuleAsync
.
Cet exemple récupère un module dans un objet Module
, met à jour la propriété module
LastActivityTime
, puis met à jour le module dans IoT Hub à l’aide de UpdateModuleAsync
.
// Retrieve the module
var module = await registryManager.GetModuleAsync("myDeviceId","myModuleId");
// Update the module object
module.LastActivityTime = DateTime.Now;
// Apply the patch to update the device twin tags section
try
{
await registryManager.UpdateModuleAsync(module);
}
catch (Exception e)
{
console.WriteLine("Module update failed.", e.Message);
}
Autre API de module
- GetModulesOnDeviceAsync : récupère les identités de module sur un appareil
- RemoveModuleAsync : supprime un module précédemment inscrit d’un appareil
Exemple de service de SDK
Le Kit de développement logiciel (SDK) Azure IoT pour .NET fournit un exemple fonctionnel d’application de service qui gère les tâches de jumeau d’identité de module. Pour plus d’informations, consultez Tests E2E du Gestionnaire de Registre.
- Python version 3.7 ou ultérieure est recommandé. Veillez à utiliser l’installation 32 bits ou 64 bits comme requis par votre programme d’installation. Lorsque vous y êtes invité pendant l’installation, veillez à ajouter Python à votre variable d’environnement propre à la plateforme.
Vue d’ensemble
Cet article décrit comment utiliser les Kits de développement logiciel (SDK) Azure IoT pour Python afin de créer du code d’application de service back-end et d’appareil pour les jumeaux d’identité de module.
Installer des packages
La bibliothèque azure-iot-device doit être installée pour créer des applications d’appareil.
pip install azure-iot-device
La bibliothèque azure-iot-hub doit être installée pour créer des applications de service back-end.
pip install azure-iot-hub
La bibliothèque msrest est utilisée pour intercepter les exceptions HTTPOperationError.
pip install msrest
Créer une application d’appareil
Cette section explique comment utiliser le code d’application d’appareil pour :
- Récupérer un jumeau d’identité de module et examiner les propriétés signalées
- Mettre à jour les propriétés signalées du jumeau d’identité de module
- Créer un gestionnaire de rappel de mise à jour de propriété souhaitée du jumeau d’identité de module
Important
Cet article comprend les étapes à suivre pour connecter un appareil en utilisant une signature d’accès partagé, également appelée « authentification par clé symétrique ». Cette méthode d’authentification est pratique pour les tests et les évaluations, mais l’authentification d’un appareil en utilisant des certificats X.509 est une approche plus sécurisée. Pour plus d’informations, consultez Meilleures pratiques de sécurité > Sécurité des connexions.
Importer des instructions
Ajoutez cette instruction import
pour utiliser la bibliothèque d’appareils.
# import the device client library
import asyncio
from azure.iot.device.aio import IoTHubDeviceClient
Connexion à un appareil
La classe IoTHubModuleClient contient des méthodes qui peuvent être utilisées pour travailler avec des jumeaux d’identité de module.
Pour connecter une application à un appareil :
- Appeler create_from_connection_string pour ajouter la chaîne de connexion d’identité de module
- Appelez connect pour connecter le client d’appareil à un hub Azure IoT
# import the device client library
import asyncio
from azure.iot.device.aio import IoTHubDeviceClient
# substitute the device connection string in conn_str
# and add it to the IoTHubDeviceClient object
conn_str = "{Device module identity connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(conn_str)
# connect the application to the device
await device_client.connect()
Récupérer un jumeau d’identité de module et examiner les propriétés
Appelez get_twin pour récupérer le jumeau d’identité de module à partir du service Azure IoT Hub. Les informations de jumeau sont placées dans une variable qui peut être examinée.
Cet exemple récupère le jumeau d’appareil et utilise la commande print
pour afficher le jumeau d’appareil au format JSON.
# get the twin
twin = await device_client.get_twin()
print("Twin document:")
print("{}".format(twin))
Mettre à jour les propriétés signalées du jumeau d’identité de module
Vous pouvez appliquer un correctif pour mettre à jour les propriétés signalées du jumeau d’identité de module au format JSON.
Pour appliquer un correctif pour mettre à jour les propriétés signalées :
- Affectez un correctif JSON de propriété signalée à une variable.
- Appelez patch_twin_reported_properties pour appliquer le correctif JSON aux propriétés signalées.
Par exemple :
# create the reported properties patch
reported_properties = {"temperature": random.randint(320, 800) / 10}
print("Setting reported temperature to {}".format(reported_properties["temperature"]))
# update the reported properties and wait for the result
await device_client.patch_twin_reported_properties(reported_properties)
Créer un gestionnaire de rappel de mise à jour de propriété souhaitée du jumeau d’identité de module
Appelez on_twin_desired_properties_patch_received pour créer une fonction de gestionnaire ou une coroutine appelée lorsqu’un correctif de propriétés souhaitées de jumeau d’identité de module est reçu. Le gestionnaire prend un argument, qui est le correctif de jumeau sous la forme d’un objet de dictionnaire JSON.
Cet exemple montre comment configurer un gestionnaire de correctifs de propriétés souhaitées nommé twin_patch_handler
.
Par exemple :
try:
# Set handlers on the client
device_client.on_twin_desired_properties_patch_received = twin_patch_handler
except:
# Clean up in the event of failure
client.shutdown()
Le twin_patch_handler
reçoit et imprime les mises à jour de propriétés souhaitées JSON.
# Define behavior for receiving twin desired property patches
def twin_patch_handler(twin_patch):
print("Twin patch received:")
print(twin_patch)
Exemples d’appareils SDK
Le Kit de développement logiciel (SDK) Azure IoT pour Python fournit un exemple fonctionnel d’applications d’appareil qui gèrent les tâches de jumeau d’identité de module :
- get_twin – Se connecter à un appareil et récupérez les informations de jumeau.
- update_twin_reported_properties – Mettre à jour les propriétés signalées du jumeau.
- receive_twin_desired_properties – Recevoir et mettre à jour les propriétés souhaitées.
Créer une application back-end
Cette section explique comment créer une application back-end pour récupérer et mettre à jour les propriétés souhaitées du jumeau d’identité de module.
La classe IoTHubRegistryManager expose toutes les méthodes nécessaires pour créer une application back-end pour interagir avec des jumeaux d’identité de module à partir du service.
Instructions d’importation de service
Ajoutez cette instruction import
pour utiliser la bibliothèque de service.
import sys
from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult
Se connecter au hub IoT
Vous pouvez connecter un service back-end à IoT Hub à l’aide des méthodes suivantes :
- Stratégie d’accès partagé
- Microsoft Entra
Important
Cet article comprend les étapes à suivre pour se connecter à un service à l’aide d’une signature d’accès partagé. Cette méthode d’authentification est pratique pour les tests et les évaluations, mais l’authentification à un service avec Microsoft Entra ID ou des identités managées est une approche plus sécurisée. Pour plus d’informations, consultez Meilleures pratiques de sécurité > Sécurité du cloud.
Se connecter à l’aide d’une stratégie d’accès partagé
Connectez-vous à IoT Hub à l’aide de fromConnectionString.
La méthode update_module_twin
utilisée dans cette section nécessite l’autorisation de stratégie d'accès partagé Service Connect pour ajouter les propriétés souhaitées à un module. En tant que paramètre pour from_connection_string
, fournissez une chaîne de connexion de stratégie d’accès partagé qui inclut l’autorisation Service Connect. Pour plus d’informations sur les stratégies d’accès partagé, consultez Contrôler l’accès à IoT Hub avec des signatures d’accès partagé.
Par exemple :
# Connect to IoT hub
IOTHUB_CONNECTION_STRING = "{IoT hub shared access policy connection string}"
iothub_registry_manager = IoTHubRegistryManager.from_connection_string(IOTHUB_CONNECTION_STRING)
Se connecter à l’aide de Microsoft Entra
Une application back-end qui utilise Microsoft Entra doit s’authentifier et obtenir des informations d’identification de jeton de sécurité avant de se connecter à IoT Hub. Ce jeton est passé à une méthode de connexion IoT Hub. Pour obtenir des informations générales sur la configuration et l’utilisation de Microsoft Entra pour IoT Hub, consultez Contrôler l’accès à IoT Hub à l’aide de Microsoft Entra ID.
Pour obtenir une vue d’ensemble de l’authentification du Kit de développement logiciel (SDK) Python, consultez Authentifier des applications Python auprès des services Azure à l’aide du Kit de développement logiciel (SDK) Azure pour Python
Configurer l’application Microsoft Entra
Vous devez configurer une application Microsoft Entra configurée pour vos informations d’identification d’authentification préférées. L’application contient des paramètres tels que la clé secrète client utilisée par l’application back-end pour s’authentifier. Les configurations d’authentification d’application disponibles sont les suivantes :
- Clè secrète client
- Certificat
- Informations d’identification d’identité fédérée
Les applications Microsoft Entra peuvent nécessiter des autorisations de rôle spécifiques en fonction des opérations effectuées. Par exemple, le Contributeur de jumeaux IoT Hub est nécessaire pour activer l’accès en lecture et en écriture à un appareil IoT Hub et à des jumeaux de module. Pour plus d’informations, consultez Gérer l’accès à IoT Hub à l’aide de l’attribution de rôle RBAC Azure.
Pour plus d’informations concernant la configuration d’une application Microsoft Entra, consultez Démarrage rapide : inscrire une application auprès de la plateforme d’identités Microsoft.
S’authentifier à l’aide de DefaultAzureCredential
Le moyen le plus simple d’utiliser Microsoft Entra pour authentifier une application back-end consiste à utiliser DefaultAzureCredential. Cependant, il est recommandé d’utiliser une autre méthode dans un environnement de production, y compris des TokenCredential
spécifiques ou des ChainedTokenCredential
simplifiées. Par souci de simplicité, cette section décrit l’authentification à l’aide de DefaultAzureCredential
et de la clé secrète client. Pour plus d’informations sur les avantages et les inconvénients de l’utilisation de DefaultAzureCredential
, consultez Chaînes d’informations d’identification dans la bibliothèque cliente Azure Identity pour Python.
DefaultAzureCredential prend en charge différents mécanismes d’authentification et détermine le type d’informations d’identification approprié en fonction de l’environnement dans lequel il s’exécute. Cette méthode tente d’utiliser plusieurs types d’informations d’identification dans un ordre jusqu’à ce qu’elle trouve des informations d’identification fonctionnelles.
Microsoft Entra nécessite ce package d’importation et l’instruction import
correspondante :
pip install azure-identity
from azure.identity import DefaultAzureCredential
Dans cet exemple, la clé secrète client d’inscription de l’application Microsoft Entra, l’ID client et l’ID de locataire ont été ajoutés aux variables d’environnement. Ces variables d’environnement sont utilisées par DefaultAzureCredential
pour authentifier l’application. Le résultat d’une authentification Microsoft Entra réussie est une information d’identification de jeton de sécurité passée à une méthode de connexion IoT Hub.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
Le AccessToken résultant peut ensuite être passé à from_token_credential
pour se connecter à IoT Hub pour n’importe quel client du Kit de développement logiciel (SDK) qui accepte les informations d’identification Microsoft Entra :
- IoTHubRegistryManager pour créer une connexion de service à IoT Hub à l’aide d’informations d’identification de jeton Entra.
- IoTHubJobManager
- DigitalTwinClient
- IoTHubHttpRuntimeManager
- IoTHubConfigurationManager
from_token_credential
nécessite deux paramètres :
- URL du service Azure : l’URL du service Azure doit être au format
{Your Entra domain URL}.azure-devices.net
sans préfixehttps://
. Par exemple :MyAzureDomain.azure-devices.net
. - Jeton d’informations d’identification Azure
Dans cet exemple, les informations d’identification Azure sont obtenues à l’aide de DefaultAzureCredential
. L’URL et les informations d’identification du service Azure sont ensuite fournies à IoTHubRegistryManager.from_token_credential
pour créer la connexion à 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)
Exemples de code
Pour obtenir des exemples d’authentification du service Microsoft Entra, consultez Bibliothèque d’authentification Microsoft (MSAL) pour Python.
Récupérer et mettre à jour les propriétés souhaitées du jumeau d’identité de module
Vous pouvez mettre à jour les propriétés souhaitées à partir d’une application back-end à l’aide de update_module_twin.
Pour récupérer et mettre à jour les propriétés souhaitées du jumeau d’identité de module :
- Appelez get_module_twin pour obtenir la version actuelle du jumeau d’identité de module.
- Utilisez la classe Twin pour ajouter les propriétés souhaitées au format JSON.
- Appelez
update_module_twin
pour appliquer le correctif au jumeau d’appareil. Vous pouvez également utiliser replace_module_twin pour remplacer les propriétés et balises souhaitées pour un jumeau d’identité de module.
Cet exemple met à jour la propriété souhaitée telemetryInterval
pour 122
.
try:
module_twin = iothub_registry_manager.get_module_twin(DEVICE_ID, MODULE_ID)
print ( "" )
print ( "Module identity twin properties before update:" )
print ( "{0}".format(module_twin.properties) )
# Update twin
twin_patch = Twin()
twin_patch.properties = TwinProperties(desired={"telemetryInterval": 122})
updated_module_twin = iothub_registry_manager.update_module_twin(
DEVICE_ID, MODULE_ID, twin_patch, module_twin.etag
)
print ( "" )
print ( "Module identity twin properties after update :" )
print ( "{0}".format(updated_module_twin.properties) )
except Exception as ex:
print ( "Unexpected error {0}".format(ex) )
except KeyboardInterrupt:
print ( "IoTHubRegistryManager sample stopped" )
Exemple de service de SDK
Le Kit de développement logiciel (SDK) Azure IoT pour Python fournit un exemple fonctionnel d’application de service qui gère les tâches de jumeau de module d’identité d’appareil. Pour plus d’informations, consultez Tester le Gestionnaire de Registre IoTHub.
- Nécessite Node.js version 10.0.x ou ultérieure
Vue d’ensemble
Cet article décrit comment utiliser les Kits de développement logiciel (SDK) Azure IoT pour Node.js afin de créer du code d’application de service back-end et d’appareil pour les jumeaux d’identité de module.
Créer une application d’appareil
Cette section explique comment utiliser le package de azure-iot-device dans le SDK Azure IoT pour Node.js pour créer une application d’appareil pour :
- Récupérer un jumeau d’identité de module et examiner les propriétés signalées
- Mettre à jour les propriétés de jumeau signalées par l’identité du module
- Recevoir une notification de modifications de propriété souhaitées du jumeau d’identité de module
Important
Cet article comprend les étapes à suivre pour connecter un appareil en utilisant une signature d’accès partagé, également appelée « authentification par clé symétrique ». Cette méthode d’authentification est pratique pour les tests et les évaluations, mais l’authentification d’un appareil en utilisant des certificats X.509 est une approche plus sécurisée. Pour plus d’informations, consultez Meilleures pratiques de sécurité > Sécurité des connexions.
Installer les packages du Kit de développement logiciel (SDK)
Exécutez cette commande pour installer le SDK d’appareil azure-iot-device sur votre ordinateur de développement :
npm install azure-iot-device --save
Le package azure-iot-device contient des objets qui s’interfacent avec les appareils IoT. La classe Twin inclut des objets spécifiques aux jumeaux. Cette section décrit le code de classe Client
utilisé pour lire et écrire des données de jumeau d’identité de module d’appareil.
Choisir un protocole de transport
L’objet Client
prend en charge ces protocoles :
Amqp
Http
- Lors de l'utilisation deHttp
, l'instanceClient
vérifie rarement les messages provenant d'IoT Hub (au minimum toutes les 25 minutes).Mqtt
MqttWs
AmqpWs
Installez les protocoles de transport nécessaires sur votre ordinateur de développement.
Par exemple, cette commande installe le protocole Amqp
:
npm install azure-iot-device-amqp --save
Pour plus d’informations sur les différences de prise en charge entre MQTT, AMQP et HTTPS, consultez Conseils sur les communications cloud-à-appareil et Choisir un protocole de communication d’appareil.
Créer un objet client
Créer un objet Client
à l’aide du package installé.
Par exemple :
const Client = require('azure-iot-device').Client;
Créer un objet de protocole
Créez un objet Protocol
à l’aide d’un package de transfert installé.
Cet exemple affecte le protocole AMQP :
const Protocol = require('azure-iot-device-amqp').Amqp;
Ajouter la chaîne de connexion d’appareil et le protocole de transfert
Appelez fromConnectionString pour fournir des paramètres de connexion d’appareil :
- connStr : chaîne de connexion du module d’identité IoT Hub.
- transportCtor : protocole de transport.
Cet exemple utilise le protocole de transfert Amqp
:
const deviceConnectionString = "{IoT hub identity module connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Ouvrir la connexion à IoT Hub
Utilisez la méthode ouvrir pour ouvrir une connexion entre un appareil IoT et IoT Hub.
Par exemple :
client.open(function(err) {
if (err) {
console.error('error connecting to hub: ' + err);
process.exit(1);
}
})
Récupérer un jumeau d’identité de module et examiner les propriétés signalées
Appelez getTwin pour récupérer les informations actuelles du jumeau d’identité de module dans un objet Twin.
Le code de l’appareil peut ensuite accéder aux propriétés du jumeau d’identité de module.
Par exemple :
// Retrieve the current module identity twin
client.getTwin(function(err, twin))
if (err)
console.error('could not get twin');
// Display the current properties
console.log('twin contents:');
console.log(twin.properties);
Mettre à jour les propriétés signalées du jumeau d’identité de module
Utilisez update pour mettre à jour les propriétés signalées par l’appareil. Incluez un correctif au format JSON comme premier paramètre, et une méthode de rappel d’état d’exécution de fonction comme deuxième paramètre de la méthode.
Dans cet exemple, un correctif de jumeau d’identité de module au format JSON est stocké dans la variable patch
. Le correctif contient une valeur de mise à jour connectivity
du jumeau d’identité du module de cellular
. Le correctif et le gestionnaire d’erreurs sont passés à la méthode update
. En cas d’erreur, un message d’erreur de console s’affiche.
// Create a patch to send to IoT Hub
var patch = {
updateTime: new Date().toString(),
firmwareVersion:'1.2.1',
weather:{
temperature: 72,
humidity: 17
}
};
// Apply the patch
twin.properties.reported.update(patch, function(err)
{
if (err)
{
console.error('could not update twin');
}
else
{
console.log('twin state reported');
process.exit();
}
});
Recevoir une notification de modifications de propriété souhaitées du jumeau d’identité de module
Créez un détecteur d’événements de mise à jour de propriété souhaitée de jumeau d’identité de module qui s’exécute lorsqu’une propriété souhaitée est modifiée en passant le nom de méthode du gestionnaire de rappel à twin.on.
Le détecteur d’événements de propriété souhaitée peut prendre la forme suivante :
- Recevoir tous les correctifs avec un seul gestionnaire d’événements
- Recevoir un événement si quelque chose change sous un regroupement de propriétés
- Recevoir un événement pour une modification de propriété unique
Recevoir tous les correctifs avec un seul gestionnaire d’événements
Vous pouvez créer un écouteur pour recevoir toute modification de propriété souhaitée.
Cet exemple de code génère toutes les propriétés reçues par le service.
twin.on('properties.desired', function (delta) {
console.log('new desired properties received:');
console.log(JSON.stringify(delta));
});
Recevoir un événement si quelque chose change sous un regroupement de propriétés
Vous pouvez créer un écouteur pour recevoir un événement si quelque chose sous un regroupement de propriétés change.
Par exemple :
Les propriétés
minTemperature
etmaxTemperature
se trouvent sous un regroupement de propriétés nomméproperties.desired.climate changes
.Une application de service back-end applique ce correctif pour mettre à jour les propriétés souhaitées
minTemperature
etmaxTemperature
:const twinPatch1 = { properties: { desired: { climate: { minTemperature: 68, maxTemperature: 76, }, }, }, };
Ce code configure un détecteur d’événements de modification de propriété souhaitée qui déclenche toutes les modifications dans le regroupement de propriétés
properties.desired.climate
. S’il existe une modification de propriété souhaitée dans ce groupe, les messages de modification de température minimale et maximale sont affichés dans la console :twin.on('properties.desired.climate', function (delta) { if (delta.minTemperature || delta.maxTemperature) { console.log('updating desired temp:'); console.log('min temp = ' + twin.properties.desired.climate.minTemperature); console.log('max temp = ' + twin.properties.desired.climate.maxTemperature); } });
Recevoir un événement pour une modification de propriété unique
Vous pouvez configurer un écouteur pour une modification de propriété unique. Dans cet exemple, le code de cet événement est exécuté uniquement si la valeur booléenne fanOn
fait partie du correctif. Le code génère le nouvel état de fanOn
souhaité chaque fois que le service le met à jour.
Une application back-end applique ce correctif de propriété souhaitée :
const twinPatch2 = { properties: { desired: { climate: { hvac: { systemControl: { fanOn: true, }, }, }, }, }, };
L’écouteur se déclenche uniquement lorsque la propriété
fanOn
change :twin.on('properties.desired.climate.hvac.systemControl', function (fanOn) { console.log('setting fan state to ' + fanOn); });
Exemple complet
Cet exemple encapsule les principes de cette section, notamment l’imbrication de fonctions de rappel à plusieurs niveaux.
var Client = require('azure-iot-device').Client;
var Protocol = require('azure-iot-device-amqp').Amqp;
// Copy/paste your module connection string here.
var connectionString = 'HostName=xxx.azure-devices.net;DeviceId=myFirstDevice2;ModuleId=myFirstModule2;SharedAccessKey=xxxxxxxxxxxxxxxxxx';
// Create a client using the Amqp protocol.
var client = Client.fromConnectionString(connectionString, Protocol);
client.on('error', function (err) {
console.error(err.message);
});
// connect to the hub
client.open(function(err) {
if (err) {
console.error('error connecting to hub: ' + err);
process.exit(1);
}
console.log('client opened');
// Create device Twin
client.getTwin(function(err, twin) {
if (err) {
console.error('error getting twin: ' + err);
process.exit(1);
}
// Output the current properties
console.log('twin contents:');
console.log(twin.properties);
// Add a handler for desired property changes
twin.on('properties.desired', function(delta) {
console.log('new desired properties received:');
console.log(JSON.stringify(delta));
});
// create a patch to send to the hub
var patch = {
updateTime: new Date().toString(),
firmwareVersion:'1.2.1',
weather:{
temperature: 75,
humidity: 20
}
};
// send the patch
twin.properties.reported.update(patch, function(err) {
if (err) throw err;
console.log('twin state reported');
});
});
});
Exemples pour le SDK d’appareils
Le Kit de développement logiciel (SDK) Azure IoT pour Node.js fournit des exemples fonctionnels d’applications d’appareil qui gèrent les tâches de jumeau d’identité de module. Pour plus d’informations, consultez l’article suivant :
Créer une application back-end
Cette section explique comment créer une application back-end qui récupère un jumeau d’identité de module et met à jour les propriétés souhaitées.
Installer le package de Kit de développement logiciel (SDK) de service
Exécutez cette commande pour installer azure-iothub sur votre machine de développement :
npm install azure-iothub --save
Créer un objet Registry
La classe Registry expose toutes les méthodes nécessaires pour interagir avec les jumeaux d’identité de module à partir d’une application back-end.
let Registry = require('azure-iothub').Registry;
Se connecter au hub IoT
Vous pouvez connecter un service back-end à IoT Hub à l’aide des méthodes suivantes :
- Stratégie d’accès partagé
- Microsoft Entra
Important
Cet article comprend les étapes à suivre pour se connecter à un service à l’aide d’une signature d’accès partagé. Cette méthode d’authentification est pratique pour les tests et les évaluations, mais l’authentification à un service avec Microsoft Entra ID ou des identités managées est une approche plus sécurisée. Pour plus d’informations, consultez Meilleures pratiques de sécurité > Sécurité du cloud.
Se connecter à l’aide d’une stratégie d’accès partagé
Utilisez fromConnectionString pour vous connecter au hub IoT Hub.
La méthode update
utilisée dans cette section nécessite l’autorisation de stratégie d'accès partagé Service Connect pour ajouter les propriétés souhaitées à un module. En tant que paramètre pour fromConnectionString
, fournissez une chaîne de connexion de stratégie d’accès partagé qui inclut l’autorisation Service Connect. Pour plus d’informations sur les stratégies d’accès partagé, consultez Contrôler l’accès à IoT Hub avec des signatures d’accès partagé.
let connectionString = '{IoT hub shared access policy connection string}';
let registry = Registry.fromConnectionString(serviceConnectionString);
Se connecter à l’aide de Microsoft Entra
Une application back-end qui utilise Microsoft Entra doit s’authentifier et obtenir des informations d’identification de jeton de sécurité avant de se connecter à IoT Hub. Ce jeton est passé à une méthode de connexion IoT Hub. Pour obtenir des informations générales sur la configuration et l’utilisation de Microsoft Entra pour IoT Hub, consultez Contrôler l’accès à IoT Hub à l’aide de Microsoft Entra ID.
Pour obtenir une vue d’ensemble de l’authentification du Kit de développement logiciel (SDK) Node.js, consultez :
- Bien démarrer avec l’authentification utilisateur sur Azure
- Bibliothèque cliente Azure Identity pour JavaScript
Configurer l’application Microsoft Entra
Vous devez configurer une application Microsoft Entra configurée pour vos informations d’identification d’authentification préférées. L’application contient des paramètres tels que la clé secrète client utilisée par l’application back-end pour s’authentifier. Les configurations d’authentification d’application disponibles sont les suivantes :
- Clè secrète client
- Certificat
- Informations d’identification d’identité fédérée
Les applications Microsoft Entra peuvent nécessiter des autorisations de rôle spécifiques en fonction des opérations effectuées. Par exemple, le Contributeur de jumeaux IoT Hub est nécessaire pour activer l’accès en lecture et en écriture à un appareil IoT Hub et à des jumeaux de module. Pour plus d’informations, consultez Gérer l’accès à IoT Hub à l’aide de l’attribution de rôle RBAC Azure.
Pour plus d’informations concernant la configuration d’une application Microsoft Entra, consultez Démarrage rapide : inscrire une application auprès de la plateforme d’identités Microsoft.
S’authentifier à l’aide de DefaultAzureCredential
Le moyen le plus simple d’utiliser Microsoft Entra pour authentifier une application back-end consiste à utiliser DefaultAzureCredential. Cependant, il est recommandé d’utiliser une autre méthode dans un environnement de production, y compris des TokenCredential
spécifiques ou des ChainedTokenCredential
simplifiées. Par souci de simplicité, cette section décrit l’authentification à l’aide de DefaultAzureCredential
et de la clé secrète client.
Pour plus d’informations sur les avantages et les inconvénients de l’utilisation de DefaultAzureCredential
, consultez Chaînes d’informations d’identification dans la bibliothèque cliente Azure Identity pour JavaScript
DefaultAzureCredential prend en charge différents mécanismes d’authentification et détermine le type d’informations d’identification approprié en fonction de l’environnement dans lequel il s’exécute. Cette méthode tente d’utiliser plusieurs types d’informations d’identification dans un ordre jusqu’à ce qu’elle trouve des informations d’identification fonctionnelles.
Microsoft Entra nécessite ce package :
npm install --save @azure/identity
Dans cet exemple, la clé secrète client d’inscription de l’application Microsoft Entra, l’ID client et l’ID de locataire ont été ajoutés aux variables d’environnement. Ces variables d’environnement sont utilisées par DefaultAzureCredential
pour authentifier l’application. Le résultat d’une authentification Microsoft Entra réussie est une information d’identification de jeton de sécurité passée à une méthode de connexion IoT Hub.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
Le jeton d’informations d’identification résultant peut ensuite être passé à fromTokenCredential pour se connecter à IoT Hub pour n’importe quel client du Kit de développement logiciel (SDK) qui accepte les informations d’identification Microsoft Entra :
fromTokenCredential
nécessite deux paramètres :
- URL du service Azure : l’URL du service Azure doit être au format
{Your Entra domain URL}.azure-devices.net
sans préfixehttps://
. Par exemple :MyAzureDomain.azure-devices.net
. - Jeton d’informations d’identification Azure
Dans cet exemple, les informations d’identification Azure sont obtenues à l’aide de DefaultAzureCredential
. L’URL et les informations d’identification du domaine Azure sont ensuite fournies à Registry.fromTokenCredential
pour créer la connexion à 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);
Exemples de code
Pour obtenir des exemples fonctionnels d’authentification du service Microsoft Entra, consultez Exemples d’identité Azure.
Récupérer un jumeau d’identité de module et mettre à jour les propriétés souhaitées
Vous pouvez créer un correctif qui contient des mises à jour de propriétés souhaitées pour un jumeau d’identité de module.
Pour mettre à jour un jumeau d’identité de module :
Appelez getModuleTwin pour récupérer l’objet Twin de l’appareil.
Mettez en forme un correctif qui contient la mise à jour du jumeau d’identité de module. Le correctif est mis en forme au format JSON, comme décrit dans classe Twin. Un correctif de service back-end contient les mises à jour de propriétés souhaitées. Pour plus d’informations sur le format des correctifs, consultez Format de balises et de propriétés.
Appelez update pour mettre à jour le jumeau d’identité du module avec le correctif.
Dans cet exemple, le jumeau d’identité de module est récupéré pour myDeviceId
et myModuleId
. Ensuite, un correctif est appliqué aux jumeaux qui contiennent des informations climate
.
// Insert your device ID and moduleId here.
var deviceId = 'myFirstDevice2';
var moduleId = 'myFirstModule2';
// Retrieve the current module identity twin
registry.getModuleTwin(deviceId, moduleId, function (err, twin) {
console.log('getModuleTwin returned ' + (err ? err : 'success'));
if (err) {
console.log(err);
} else {
console.log('success');
console.log('Current twin:' + JSON.stringify(twin))
// Format a desired property patch
const twinPatch1 = {
properties: {
desired: {
climate: { minTemperature: 69, maxTemperature: 77, },
},
},
};
// Send the desired property patch to IoT Hub
twin.update(twinPatch1, function(err) {
if (err) throw err;
console.log('twin state reported');
});
}
});
Exemples du Kit de développement logiciel (SDK) de service
Le Kit de développement logiciel (SDK) Azure IoT pour Node.js fournit des exemples fonctionnels d’applications de service qui gèrent les tâches de jumeau d’identité de module. Pour plus d’informations, consultez l’article suivant :