Erste Schritte mit der Geräteverwaltung
Back-End-Apps können Azure IoT Hub-Primitive wie Gerätezwillinge und direkte Methoden verwenden, um Aktionen zur Geräteverwaltung auf Geräten remote zu starten und zu überwachen.
Verwenden Sie eine direkte Methode von einer Back-End-App, um Geräteverwaltungsaktionen wie Neustarts, Zurücksetzen auf Werkseinstellungen und Firmwareupdates, zu initiieren.
Das Gerät ist für Folgendes verantwortlich:
- Verarbeiten der von IoT Hub gesendeten Anforderung der direkten Methode
- Initiieren der entsprechenden gerätespezifischen Aktion auf dem Gerät
- Senden von Statusupdates über die gemeldeten Eigenschaften an IoT Hub
In diesem Artikel wird veranschaulicht, wie eine Back-End-App und eine Geräte-App zusammen verwendet werden können, um einen Remote-Geräteaktion über die direkte Methode zu initiieren und zu überwachen.
- Eine Dienst-App ruft eine direkte Methode zum Neustart in einer Geräte-App über einen IoT-Hub auf.
- Eine Geräte-App verarbeitet eine direkte Methode zum Neustarten eines Geräts.
Hinweis
Die in diesem Artikel beschriebenen Features stehen nur im Standard-Tarif von IoT Hub zur Verfügung. Weitere Informationen zu den IoT Hub-Tarifen „Basic“ und „Standard/Free“ finden Sie unter Wählen des richtigen IoT Hub-Tarifs für Ihre Lösung.
Hinweis
Dieser Artikel soll die Beispiele der Azure IoT-SDKs ergänzen, auf die in diesem Artikel verwiesen wird. Sie können SDK Tools verwenden, um Geräte- und Back-End-Anwendungen zu erstellen.
Voraussetzungen
Ein IoT-Hub
Ein registriertes Gerät
Wenn Ihre Anwendung das MQTT-Protokoll verwendet, stellen Sie sicher, dass der Port 8883 in Ihrer Firewall geöffnet ist. Das MQTT-Protokoll kommuniziert über den Port 8883. In einigen Netzwerkumgebungen von Unternehmen oder Bildungseinrichtungen ist dieser Port unter Umständen blockiert. Weitere Informationen und Problemumgehungen finden Sie unter Herstellen einer Verbindung mit IoT Hub (MQTT).
- Erfordert Visual Studio
Übersicht
Dieser Artikel beschreibt, wie Sie Azure IoT-SDK für .NET verwenden, um Geräte- und Back-End-Dienstanwendungscode für direkte Nachrichten eines Geräts zu erstellen.
Erstellen einer Geräteanwendung
In diesem Abschnitt wird beschrieben, wie Geräteanwendungscode zum Erstellen eines Rückruflisteners direkter Methode verwendet wird.
Wichtig
Dieser Artikel enthält Schritte zum Verbinden eines Geräts mithilfe einer Shared Access Signature, was auch als symmetrische Schlüsselauthentifizierung bezeichnet wird. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung eines Geräts mit X.509-Zertifikaten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Verbindungssicherheit.
Erforderliches NuGet-Gerätepaket
Geräteclientanwendungen, die in C# geschrieben wurden, erfordern das NuGet-Paket Microsoft.Azure.Devices.Client.
Fügen Sie diese using
-Anweisungen hinzu, um die Gerätebibliothek zu verwenden.
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
Mit einem Gerät verbinden
Die Klasse DeviceClient macht alle Methoden verfügbar, die für die Interaktion mit Gerätenachrichten des Geräts erforderlich sind.
Stellen Sie eine Verbindung zu dem Gerät mithilfe der Methode CreateFromConnectionString sowie der Geräteverbindungszeichenfolge und dem Verbindungstransportprotokoll her.
Der Transportprotokollparameter CreateFromConnectionString
TransportType unterstützt die folgenden Transportprotokolle:
Mqtt
Mqtt_WebSocket_Only
Mqtt_Tcp_Only
Amqp
Amqp_WebSocket_Only
Amqp_Tcp_Only
Http1
In diesem Beispiel wird mithilfe des Mqtt
-Transportprotokolls eine Verbindung mit einem Gerät hergestellt.
static string DeviceConnectionString = "{IoT hub device connection string}";
static deviceClient = null;
deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString,
TransportType.Mqtt);
Erstellen eines Rückruflisteners direkter Methode
Verwenden Sie SetMethodHandlerAsync, um einen Rückruflistener direkter Methode zu initialisieren. Der Listener ist einem Methodennamen-Schlüsselwort zugeordnet, z. B. „reboot“. Der Methodenname kann in einer IoT Hub- oder Back-End-Anwendung verwendet werden, um die Rückrufmethode auf dem Gerät auszulösen.
In diesem Beispiel wird ein Rückruflistener mit dem Namen onReboot
eingerichtet, der ausgelöst wird, wenn der Name der direkten Methoden „reboot“ aufgerufen wird.
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);
}
Anschließend implementiert die Rückrufmethode onReboot
in diesem Beispiel die direkte Methode auf dem Gerät.
Die Handlerfunktion ruft MethodResponse auf, um eine Antwortbestätigung an die aufrufende Anwendung zu senden.
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));
}
Hinweis
Der Einfachheit halber wird in diesem Artikel keine Wiederholungsrichtlinie implementiert. Im Produktionscode sollten Sie Wiederholungsrichtlinien implementieren (z.B. exponentielles Backoff), wie es in Behandeln vorübergehender Fehler vorgeschlagen wird.
Beispiele für SDK-Geräte
Das Azure IoT SDK für .NET bietet Arbeitsbeispiele von Geräte-Apps, die Aufgaben der direkten Methode verarbeiten. Weitere Informationen finden Sie unter:
Erstellen einer Back-End-Anwendung
In diesem Abschnitt wird beschrieben, wie eine direkte Methode auf einem Gerät ausgelöst wird.
Die Klasse ServiceClient macht alle Methoden verfügbar, die zum Erstellen einer Back-End-Anwendung erforderlich sind, um Anrufe der direkten Methoden an Geräte zu senden.
Erforderliches NuGet-Dienstpaket
Back-End-Dienstanwendungen erfordern das NuGet-Paket Microsoft.Azure.Devices.
Fügen Sie diese using
-Anweisungen hinzu, um die Dienstbibliothek zu verwenden.
using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;
Herstellen einer Verbindung mit dem IoT-Hub
Sie können einen Back-End-Dienst mit IoT Hub mithilfe der folgenden Methoden verbinden:
- SAS-Richtlinie
- Microsoft Entra
Wichtig
Dieser Artikel enthält Schritte zum Herstellen einer Verbindung mit einem Dienst mithilfe einer Shared Access Signature. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung bei einem Dienst mit Microsoft Entra ID oder verwalteten Identitäten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Cloudsicherheit.
Herstellen einer Verbindung mithilfe einer SAS-Richtlinie
Verbinden Sie eine Back-End-Anwendung mithilfe von CreateFromConnectionString.
Ihr Dienst muss über die Berechtigung Dienstverbindung verfügen, um über IoT Hub eine direkte Methode auf einem Gerät aufrufen zu können. Standardmäßig wird jeder IoT-Hub mit einer SAS-Richtlinie namens service erstellt, die diese Berechtigung erteilt.
Geben Sie als Parameter für CreateFromConnectionString
die SAS-Richtlinie für den Dienst an. Weitere Informationen zu SAS-Richtlinien finden Sie unter Steuer des Zugriffs auf IoT Hub mithilfe von Shared Access Signatures.
ServiceClient serviceClient;
string connectionString = "{IoT hub service shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
Verbinden mit Microsoft Entra
Eine Back-End-App, die Microsoft Entra verwendet, muss erfolgreich authentifiziert werden und Anmeldeinformationen für Sicherheitstoken erhalten, bevor Sie eine Verbindung mit IoT Hub herstellen. Dieses Token wird an eine IoT Hub-Verbindungsmethode übergeben. Allgemeine Informationen zum Einrichten und Verwenden von Microsoft Entra für IoT Hub finden Sie unter Steuern des Zugriffs auf IoT Hub mithilfe von Microsoft Entra ID.
Konfigurieren der Microsoft Entra-App
Sie müssen eine Microsoft Entra-App einrichten, die für Ihre bevorzugten Authentifizierungsanmeldeinformationen konfiguriert ist. Die App enthält Parameter wie den geheimen Clientschlüssel, der von der Back-End-Anwendung zur Authentifizierung verwendet wird. Die verfügbaren Konfigurationen für die App-Authentifizierung sind:
- Geheimer Clientschlüssel
- Zertifikat
- Anmeldeinformationen für Verbundidentität
Microsoft Entra-Apps erfordern je nach ausgeführten Vorgängen möglicherweise bestimmte Rollenberechtigungen. Beispielsweise ist IoT Hub Twin Contributor erforderlich, um Lese- und Schreibzugriff auf ein IoT Hub-Gerät und Modulzwilling zu ermöglichen. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf IoT Hub mithilfe der Azure RBAC-Rollenzuweisung.
Weitere Informationen zum Einrichten einer Microsoft Entra-App finden Sie in der Schnellstartanleitung: Registrieren einer Anwendung bei der Microsoft Identitäts-Plattform.
Authentifizieren mithilfe von DefaultAzureCredential
Die einfachste Möglichkeit, Microsoft Entra zum Authentifizieren einer Back-End-Anwendung zu verwenden, besteht darin, DefaultAzureCredential zu verwenden. Es wird jedoch empfohlen, eine andere Methode in einer Produktionsumgebung zu verwenden, einschließlich einer bestimmten TokenCredential
oder analysierten ChainedTokenCredential
. Der Einfachheit halber beschreibt dieser Abschnitt die Authentifizierung mit DefaultAzureCredential
und den geheimen Clientschlüssel. Weitere Informationen zu den Vor- und Nachteilen der Verwendung von DefaultAzureCredential
finden Sie unter Verwendungsleitfaden für DefaultAzureCredential.
DefaultAzureCredential
unterstützt verschiedene Authentifizierungsmechanismen und bestimmt den entsprechenden Anmeldeinformationstyp basierend auf der Umgebung, in der er ausgeführt wird. Es versucht, mehrere Anmeldeinformationstypen in einer Reihenfolge zu verwenden, bis sie eine funktionierende Anmeldeinformation findet.
Microsoft Entra erfordert diese NuGet-Pakete und entsprechende using
Anweisungen:
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
In diesem Beispiel werden Clientschlüssel, Client-ID und Mandanten-ID der Microsoft Entra-App zu Umgebungsvariablen hinzugefügt. Diese Umgebungsvariablen werden von DefaultAzureCredential
verwendet, um die Anwendung zu authentifizieren. Das Ergebnis einer erfolgreichen Microsoft Entra-Authentifizierung ist eine Sicherheitstoken-Anmeldeinformation, die an eine IoT Hub-Verbindungsmethode übergeben wird.
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();
Das resultierende TokenCredential kann dann an eine Verbindung mit der IoT Hub-Methode für jeden SDK-Client übergeben werden, der Microsoft Entra-Anmeldeinformationen akzeptiert:
In diesem Beispiel wird TokenCredential
an ServiceClient.Create
übergeben, um ein ServiceClient-Verbindungsobjekt zu erstellen.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
In diesem Beispiel wird TokenCredential
an RegistryManager.Create
übergeben, um ein RegistryManager-Objekt zu erstellen.
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Codebeispiel
Ein funktionierendes Beispiel für die Microsoft Entra-Dienstauthentifizierung finden Sie im Beispiel für die rollenbasierte Authentifizierung.
Aufrufen einer Methode auf einem Gerät
Um einer Methode auf einem Gerät aufzurufen:
- Erstellen Sie ein CloudToDeviceMethod-Objekt. Geben Sie den Namen der direkten Methode des Geräts als Parameter weiter.
- Rufen Sie InvokeDeviceMethodAsync auf, um die Methode auf dem Gerät aufzurufen.
In diesem Beispiel wird die Methode „reboot“ aufgerufen, um einen Neustart auf dem Gerät zu initiieren. Die Methode „reboot“ wird einem Listener auf dem Gerät zugeordnet, wie im Abschnitt Erstellen eines Rückruflisteners direkter Methode in diesem Artikel beschrieben.
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-Dienstbeispiele
Das Azure IoT SDK für .NET bietet Arbeitsbeispiele von Dienst-Apps, die Nachrichtenaufgaben verarbeiten. Weitere Informationen finden Sie unter:
- Erfordert das Java SE Development Kit 8. Wählen Sie unter Langfristiger Support unbedingt Java 8 aus, um zu den Downloads für JDK 8 zu gelangen.
Übersicht
Dieser Artikel beschreibt, wie Sie Azure IoT-SDK für Java verwenden, um Geräte- und Back-End-Dienstanwendungscode für direkte Methoden des Geräts zu erstellen.
Erstellen einer Geräteanwendung
In diesem Abschnitt wird beschrieben, wie Geräteanwendungscode zum Erstellen eines Rückruflisteners direkter Methode verwendet wird.
Wichtig
Dieser Artikel enthält Schritte zum Verbinden eines Geräts mithilfe einer Shared Access Signature, was auch als symmetrische Schlüsselauthentifizierung bezeichnet wird. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung eines Geräts mit X.509-Zertifikaten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Verbindungssicherheit.
Geräte-Importanweisung
Verwenden Sie die folgenden Geräte-Importanweisungen, um auf das Azure IoT SDK für Java zuzugreifen.
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;
Mit einem Gerät verbinden
Die Klasse DeviceClient macht alle Methoden verfügbar, die für die Interaktion mit direkten Methoden am Gerät erforderlich sind.
So stellen Sie eine Verbindung zu einem Gerät her:
Verwenden Sie IotHubClientProtocol, um ein Transportprotokoll auszuwählen. Zum Beispiel:
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
Verwenden Sie den
DeviceClient
-Konstruktor, um die primäre Verbindungszeichenfolge und das Protokoll des Geräts hinzuzufügen.String connString = "{IoT hub device connection string}"; DeviceClient client = new DeviceClient(connString, protocol);
Stellen Sie für das Gerät mithilfe von open eine Verbindung mit dem IoT-Hub her. Wenn der Client bereits geöffnet ist, tut die Methode nichts.
client.open(true);
Erstellen eines Rückruflisteners direkter Methode
Verwenden Sie subscribeToMethods, um einen Rückruflistener direkter Methode zu initialisieren. subscribeToMethods
lauscht auf eingehende direkte Methoden, bis die Verbindung beendet wird. Der Methodenname und die Nutzdaten werden für jeden Anruf direkter Methode empfangen.
Der Listener sollte DirectMethodResponse aufrufen, um eine Methodenantwortbestätigung an die aufrufende Anwendung zu senden.
Beispiel:
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");
Hinweis
Der Einfachheit halber wird in diesem Artikel keine Wiederholungsrichtlinie implementiert. Im Produktionscode sollten Sie Wiederholungsrichtlinien implementieren (z.B. exponentielles Backoff), wie es in Behandeln vorübergehender Fehler vorgeschlagen wird.
Beispiele für SDK-Geräte
Das Azure IoT SDK für Java enthält ein praktisches Beispiel zum Testen der in diesem Artikel beschriebenen Konzepte für Geräte-Apps. Weitere Informationen finden Sie im Beispiel für die direkte Methode.
Erstellen einer Back-End-Anwendung
In diesem Abschnitt wird beschrieben, wie Sie einen Remoteneustart auf einem Gerät mithilfe einer direkten Methode initiieren.
Die Klasse ServiceClient
DeviceMethod enthält Methoden, mit denen Dienste auf Gerätezwillinge zugreifen können.
Dienst-Importanweisungen
Verwenden Sie die folgenden Dienst-Importanweisungen, um auf das Azure IoT SDK für Java zuzugreifen.
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;
Herstellen einer Verbindung mit dem IoT-Hub
Sie können einen Back-End-Dienst mit IoT Hub mithilfe der folgenden Methoden verbinden:
- SAS-Richtlinie
- Microsoft Entra
Wichtig
Dieser Artikel enthält Schritte zum Herstellen einer Verbindung mit einem Dienst mithilfe einer Shared Access Signature. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung bei einem Dienst mit Microsoft Entra ID oder verwalteten Identitäten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Cloudsicherheit.
Herstellen einer Verbindung mithilfe einer SAS-Richtlinie
Verwenden Sie den Konstruktor DeviceMethod, um die primäre Verbindungszeichenfolge des Diensts hinzuzufügen und eine Verbindung mit IoT Hub herzustellen.
Ihr Dienst muss über die Berechtigung Dienstverbindung verfügen, um über IoT Hub eine direkte Methode auf einem Gerät aufrufen zu können. Standardmäßig wird jeder IoT-Hub mit einer SAS-Richtlinie namens service erstellt, die diese Berechtigung erteilt.
Geben Sie als Parameter für den Konstruktor DeviceMethod
die SAS-Richtlinie für den Dienst an. Weitere Informationen zu SAS-Richtlinien finden Sie unter Steuer des Zugriffs auf IoT Hub mithilfe von Shared Access Signatures.
Zum Beispiel:
String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
DeviceMethod methodClient = new DeviceMethod(iotHubConnectionString);
Verbinden mit Microsoft Entra
Eine Back-End-App, die Microsoft Entra verwendet, muss erfolgreich authentifiziert werden und Anmeldeinformationen für Sicherheitstoken erhalten, bevor Sie eine Verbindung mit IoT Hub herstellen. Dieses Token wird an eine IoT Hub-Verbindungsmethode übergeben. Allgemeine Informationen zum Einrichten und Verwenden von Microsoft Entra für IoT Hub finden Sie unter Steuern des Zugriffs auf IoT Hub mithilfe von Microsoft Entra ID.
Eine Übersicht über die Java SDK-Authentifizierung finden Sie unter Azure-Authentifizierung mit Java und Azure Identität.
Der Einfachheit halber konzentriert sich dieser Abschnitt auf die Beschreibung der Authentifizierung mithilfe des geheimen Clientschlüssels.
Konfigurieren der Microsoft Entra-App
Sie müssen eine Microsoft Entra-App einrichten, die für Ihre bevorzugten Authentifizierungsanmeldeinformationen konfiguriert ist. Die App enthält Parameter wie den geheimen Clientschlüssel, der von der Back-End-Anwendung zur Authentifizierung verwendet wird. Die verfügbaren Konfigurationen für die App-Authentifizierung sind:
- Geheimer Clientschlüssel
- Zertifikat
- Anmeldeinformationen für Verbundidentität
Microsoft Entra-Apps erfordern je nach ausgeführten Vorgängen möglicherweise bestimmte Rollenberechtigungen. Beispielsweise ist IoT Hub Twin Contributor erforderlich, um Lese- und Schreibzugriff auf ein IoT Hub-Gerät und Modulzwilling zu ermöglichen. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf IoT Hub mithilfe der Azure RBAC-Rollenzuweisung.
Weitere Informationen zum Einrichten einer Microsoft Entra-App finden Sie in der Schnellstartanleitung: Registrieren einer Anwendung bei der Microsoft Identitäts-Plattform.
Authentifizieren mithilfe von DefaultAzureCredential
Die einfachste Möglichkeit, Microsoft Entra zum Authentifizieren einer Back-End-Anwendung zu verwenden, besteht darin, DefaultAzureCredential zu verwenden. Es wird jedoch empfohlen, eine andere Methode in einer Produktionsumgebung zu verwenden, einschließlich einer bestimmten TokenCredential
oder analysierten ChainedTokenCredential
.
Weitere Informationen zu den Vor- und Nachteilen der Verwendung DefaultAzureCredential
finden Sie unter Anmeldeinformationsketten in der Azure Identity-Clientbibliothek für Java.
DefaultAzureCredential unterstützt verschiedene Authentifizierungsmechanismen und bestimmt den entsprechenden Anmeldeinformationstyp basierend auf der Umgebung, in der er ausgeführt wird. Er versucht, mehrere Anmeldeinformationstypen in einer Reihenfolge zu verwenden, bis er eine funktionierende Anmeldeinformation findet.
Sie können Microsoft Entra-App-Anmeldeinformationen mithilfe von DefaultAzureCredentialBuilderauthentifizieren. Speichern Sie Verbindungsparameter wie geheime Clientschlüssel-Mandanten-ID, Client-ID und geheime Clientschlüsselwerte als Umgebungsvariablen. Nachdem die TokenCredential
Datei erstellt wurde, übergeben Sie sie an ServiceClient oder einen anderen Generator als Parameter Anmeldeinformationen.
In diesem Beispiel versucht DefaultAzureCredentialBuilder
eine Verbindung aus der in DefaultAzureCredential beschriebenen Liste zu authentifizieren. Das Ergebnis einer erfolgreichen Microsoft Entra-Authentifizierung ist eine Sicherheitstokenanmeldeinformation, die an einen Konstruktor wie ServiceClientübergeben wird.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Authentifizieren mit ClientSecretCredentialBuilder
Sie können ClientSecretCredentialBuilder verwenden, um eine Anmeldeinformation mithilfe von geheimen Clientinformationen zu erstellen. Bei erfolgreicher Ausführung gibt die Methode eine TokenCredential zurück, die als Parameter "Anmeldeinformationen" an ServiceClient oder einen anderen Generator übergeben werden kann.
In diesem Beispiel wurden Clientschlüssel, Client-ID und Mandanten-ID-Werte der Microsoft Entra-App zu Umgebungsvariablen hinzugefügt. Diese Umgebungsvariablen werden von ClientSecretCredentialBuilder
verwendet, um die Anmeldeinformationen zu erstellen.
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();
Andere Authentifizierungsklassen
Das Java SDK enthält auch diese Klassen, die eine Back-End-App mit Microsoft Entra authentifizieren:
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
Codebeispiele
Arbeitsbeispiele für die Microsoft Entra-Dienstauthentifizierung finden Sie im Beispielfür die rollenbasierte Authentifizierung.
Aufrufen einer Methode auf einem Gerät
Rufen Sie DeviceMethod.invoke auf, um eine Methode auf einem Gerät aufzurufen und den Ergebnisstatus zurückzugeben.
Der Nutzdatenparameter invoke
ist optional. Verwenden Sie null
, wenn keine Nutzdaten bereitgestellt werden. Der Nutzdatenparameter kann verschiedene Datenformen annehmen, einschließlich Zeichenfolge, Bytearray und HashMap. Beispiele finden Sie unter Tests für die direkte Methode.
In diesem Beispiel wird die Methode „reboot“ aufgerufen, um einen Neustart auf dem Gerät zu initiieren. Die Methode „reboot“ wird einem Listener auf dem Gerät zugeordnet, wie im Abschnitt Erstellen eines Rückruflisteners direkter Methode in diesem Artikel beschrieben.
Zum Beispiel:
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-Dienstbeispiele
Das Azure IoT SDK für Java stellt ein funktionierendes Beispiel für Dienst-Apps bereit, die Aufgaben der direkten Methode verarbeiten. Weitere Informationen finden Sie unter:
- Python SDK – Python-Version 3.7 oder höher wird empfohlen. Stellen Sie je nach Einrichtung sicher, dass die 32-Bit- bzw. die 64-Bit-Installation verwendet wird. Fügen Sie Python Ihrer plattformspezifischen Umgebungsvariablen hinzu, wenn Sie während der Installation dazu aufgefordert werden.
Übersicht
Dieser Artikel beschreibt, wie Sie Azure IoT-SDK für Python verwenden, um Geräte- und Back-End-Dienstanwendungscode für direkte Methoden des Geräts zu erstellen.
Installieren von Paketen
Die Azure-iot-Device-Bibliothek muss installiert werden, um Geräteanwendungen zu erstellen.
pip install azure-iot-device
Die Azure-iot-hub-Bibliothek muss installiert werden, um Back-End-Dienstanwendungen zu erstellen.
pip install azure-iot-hub
Erstellen einer Geräteanwendung
In diesem Abschnitt wird beschrieben, wie Geräteanwendungscode zum Erstellen eines Rückruflisteners direkter Methode verwendet wird.
Wichtig
Dieser Artikel enthält Schritte zum Verbinden eines Geräts mithilfe einer Shared Access Signature, was auch als symmetrische Schlüsselauthentifizierung bezeichnet wird. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung eines Geräts mit X.509-Zertifikaten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Verbindungssicherheit.
Geräte-Importanweisungen
Fügen Sie diese Importanweisung hinzu, um auf IoTHubDeviceClient
und MethodResponse
zuzugreifen.
# import the device client library
from azure.iot.device import IoTHubDeviceClient, MethodResponse
Mit einem Gerät verbinden
Die Klasse IoTHubDeviceClient enthält Methoden, die für die Arbeit mit direkten Methoden verwendet werden können.
Verwenden Sie create_from_connection_string, um eine Anwendung mithilfe einer Geräteverbindungszeichenfolge mit einem Gerät zu verbinden.
# 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)
Erstellen eines Rückrufs direkter Methode
Verwenden Sie on_method_request_received, um eine Handlerfunktion oder Coroutine zu erstellen, die aufgerufen wird, wenn eine direkte Methode empfangen wird. Der Listener ist einem Methodennamen-Schlüsselwort zugeordnet, z. B. „reboot“. Der Methodenname kann in einer IoT Hub- oder Back-End-Anwendung verwendet werden, um die Rückrufmethode auf dem Gerät auszulösen.
Die Handlerfunktion sollte eine MethodResponse erstellen und an send_method_response weitergeben, um eine Antwortbestätigung direkter Methode an die aufrufende Anwendung zu senden.
In diesem Beispiel wird ein Handler für die direkter Methode mit dem Namen method_request_handler
eingerichtet.
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()
In diesem Beispiel implementiert die Rückrufmethode method_request_handler
die direkte Methode auf dem Gerät. Der Code wird ausgeführt, wenn die direkte Methode „rebootDevice“ von einer Dienstanwendung aufgerufen wird. Die Methode ruft send_method_response
auf, um eine Antwortbestätigung direkter Methode an die aufrufende Anwendung zu senden.
# 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)
Beispiele für SDK-Geräte
Das Azure IoT SDK für Python bietet ein praktisches Beispiel für eine Geräte-App, die Aufgaben von direkten Methoden verarbeitet. Weitere Informationen finden Sie unter Empfangen der direkten Methoden.
Erstellen einer Back-End-Anwendung
In diesem Abschnitt wird beschrieben, wie Sie eine Back-End-Dienstanwendung verwenden, um eine direkte Methode auf einem Gerät aufzurufen.
Die Klasse IoTHubRegistryManager macht alle Methoden verfügbar, die zum Erstellen einer Back-End-Anwendung zum Senden von Nachrichten an ein Gerät erforderlich sind.
Dienst-Importanweisungen
Fügen Sie diese Importanweisungen hinzu, um eine Verbindung mit Iot Hub herzustellen, direkte Methoden für Cloud-zu-Gerät zu senden und Antworten direkter Methode für Geräte zu empfangen.
from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.models import CloudToDeviceMethod, CloudToDeviceMethodResult
Herstellen einer Verbindung mit dem IoT-Hub
Sie können einen Back-End-Dienst mit IoT Hub mithilfe der folgenden Methoden verbinden:
- SAS-Richtlinie
- Microsoft Entra
Wichtig
Dieser Artikel enthält Schritte zum Herstellen einer Verbindung mit einem Dienst mithilfe einer Shared Access Signature. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung bei einem Dienst mit Microsoft Entra ID oder verwalteten Identitäten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Cloudsicherheit.
Herstellen einer Verbindung mithilfe einer SAS-Richtlinie
Stellen Sie mithilfe von from_connection_string eine Verbindung mit dem IoT-Hub her.
Ihr Dienst muss über die Berechtigung Dienstverbindung verfügen, um über IoT Hub eine direkte Methode auf einem Gerät aufrufen zu können. Standardmäßig wird jeder IoT-Hub mit einer SAS-Richtlinie namens service erstellt, die diese Berechtigung erteilt.
Geben Sie als Parameter für from_connection_string
die SAS-Richtlinie für den Dienst an. Weitere Informationen zu SAS-Richtlinien finden Sie unter Steuer des Zugriffs auf IoT Hub mithilfe von Shared Access Signatures.
Zum Beispiel:
# Connect to IoT hub
IOTHUB_CONNECTION_STRING = "{IoT hub service connection string}"
iothub_registry_manager = IoTHubRegistryManager.from_connection_string(IOTHUB_CONNECTION_STRING)
Verbinden mit Microsoft Entra
Eine Back-End-App, die Microsoft Entra verwendet, muss erfolgreich authentifiziert werden und Anmeldeinformationen für Sicherheitstoken erhalten, bevor Sie eine Verbindung mit IoT Hub herstellen. Dieses Token wird an eine IoT Hub-Verbindungsmethode übergeben. Allgemeine Informationen zum Einrichten und Verwenden von Microsoft Entra für IoT Hub finden Sie unter Steuern des Zugriffs auf IoT Hub mithilfe von Microsoft Entra ID.
Eine Übersicht über die Python SDK-Authentifizierung finden Sie unter Authentifizieren von Python-Apps für Azure-Dienste mithilfe des Azure SDK für Python
Konfigurieren der Microsoft Entra-App
Sie müssen eine Microsoft Entra-App einrichten, die für Ihre bevorzugten Authentifizierungsanmeldeinformationen konfiguriert ist. Die App enthält Parameter wie den geheimen Clientschlüssel, der von der Back-End-Anwendung zur Authentifizierung verwendet wird. Die verfügbaren Konfigurationen für die App-Authentifizierung sind:
- Geheimer Clientschlüssel
- Zertifikat
- Anmeldeinformationen für Verbundidentität
Microsoft Entra-Apps erfordern je nach ausgeführten Vorgängen möglicherweise bestimmte Rollenberechtigungen. Beispielsweise ist IoT Hub Twin Contributor erforderlich, um Lese- und Schreibzugriff auf ein IoT Hub-Gerät und Modulzwilling zu ermöglichen. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf IoT Hub mithilfe der Azure RBAC-Rollenzuweisung.
Weitere Informationen zum Einrichten einer Microsoft Entra-App finden Sie in der Schnellstartanleitung: Registrieren einer Anwendung bei der Microsoft Identitäts-Plattform.
Authentifizieren mithilfe von DefaultAzureCredential
Die einfachste Möglichkeit, Microsoft Entra zum Authentifizieren einer Back-End-Anwendung zu verwenden, besteht darin, DefaultAzureCredential zu verwenden. Es wird jedoch empfohlen, eine andere Methode in einer Produktionsumgebung zu verwenden, einschließlich einer bestimmten TokenCredential
oder analysierten ChainedTokenCredential
. Der Einfachheit halber beschreibt dieser Abschnitt die Authentifizierung mit DefaultAzureCredential
und den geheimen Clientschlüssel. Weitere Informationen zu den Vor- und Nachteilen der Verwendung von DefaultAzureCredential
finden Sie unter Anmeldeinformationsketten in der Azure Identity-Clientbibliothek für Python.
DefaultAzureCredential unterstützt verschiedene Authentifizierungsmechanismen und bestimmt den entsprechenden Anmeldeinformationstyp basierend auf der Umgebung, in der er ausgeführt wird. Er versucht, mehrere Anmeldeinformationstypen in einer Reihenfolge zu verwenden, bis er eine funktionierende Anmeldeinformation findet.
Microsoft Entra erfordert dieses Importpaket und die entsprechende import
-Anweisung:
pip install azure-identity
from azure.identity import DefaultAzureCredential
In diesem Beispiel wurden Clientschlüssel, Client-ID und Mandanten-ID der Microsoft Entra-App zu Umgebungsvariablen hinzugefügt. Diese Umgebungsvariablen werden von DefaultAzureCredential
verwendet, um die Anwendung zu authentifizieren. Das Ergebnis einer erfolgreichen Microsoft Entra-Authentifizierung ist eine Sicherheitstoken-Anmeldeinformation, die an eine IoT Hub-Verbindungsmethode übergeben wird.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
Das resultierende AccessToken kann dann an from_token_credential
zur Verbindung mit IoT Hub für jeden SDK-Client übergeben werden, der Microsoft Entra-Anmeldeinformationen akzeptiert:
- IoTHubRegistryManager zum Erstellen einer Dienstverbindung mit IoT Hub mithilfe einer Entra-Token-Anmeldeinformationen.
- IoTHubJobManager
- DigitalTwinClient
- IoTHubHttpRuntimeManager
- IoTHubConfigurationManager
from_token_credential
erfordert zwei Parameter:
- Die Azure-Dienst-URL – Die Azure-Dienst-URL sollte im Format
{Your Entra domain URL}.azure-devices.net
ohne einhttps://
-Präfix vorliegen. Beispiel:MyAzureDomain.azure-devices.net
. - Das Azure-Anmeldeinformationstoken
In diesem Beispiel werden die Azure-Anmeldeinformationen mithilfe von DefaultAzureCredential
erlangt. Die Azure-Dienst-URL und die Anmeldeinformationen werden dann an IoTHubRegistryManager.from_token_credential
bereitgestellt, um die Verbindung mit IoT Hub zu erstellen.
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)
Codebeispiele
Arbeitsbeispiele für die Microsoft Entra-Dienstauthentifizierung finden Sie unter Microsoft Authentication Library (MSAL) für Python.
Aufrufen einer Methode auf einem Gerät
Sie können eine direkte Methode anhand des Namens auf einem Gerät aufrufen. Der Methodenname identifiziert die Methode. Im folgenden und vorherigen Gerätebeispiel, das im Erstellen eines Rückrufs direkter Methode gezeigt wird, lautet der Name der direkten Methode „rebootDevice“.
So rufen Sie eine direkte Methode auf einem Gerät auf:
- Erstellen Sie ein CloudToDeviceMethod-Objekt. Geben Sie den Methodennamen und die Nutzdaten als Parameter an.
- Rufen Sie invoke_device_method auf, um eine direkte Methode auf einem Gerät aufzurufen. Geben Sie die Geräte-ID und das Nutzdatenobjekt
CloudToDeviceMethod
als Parameter an.
In diesem Beispiel wird CloudToDeviceMethod
aufgerufen, um eine direkte Methode mit dem Namen „rebootDevice“ auf einem Gerät aufzurufen. Nachdem die direkte Methode erfolgreich aufgerufen wurde, werden die Antwortnutzdaten der direkten Methode angezeigt.
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-Dienstbeispiele
Das Azure IoT SDK für Python bietet Arbeitsbeispiele von Dienst-Apps, die Aufgaben der direkten Methode verarbeiten. Weitere Informationen finden Sie unter:
- Erfordert die Node.js-Version 10.0.x oder höher
Übersicht
Dieser Artikel beschreibt, wie Sie Azure IoT-SDK für Node.js verwenden, um Geräte- und Back-End-Dienstanwendungscode für direkte Methoden des Geräts zu erstellen.
Erstellen einer Geräteanwendung
In diesem Abschnitt wird beschrieben, wie Geräteanwendungscode zum Erstellen eines Rückrufs direkter Methode verwendet wird.
Installieren der SDK-Pakete
Das Paket azure-iot-device enthält Objekte, die über eine Schnittstelle mit IoT-Geräten verfügen. Führen Sie diesen Befehl aus, um das Geräte-SDK azure-iot-device auf Ihrem Computer zu installieren:
npm install azure-iot-device --save
Auswählen eines Transportprotokolls
Das Client
-Objekt unterstützt die folgenden Protokolle:
Amqp
Http
: Bei Verwendung vonHttp
führt dieClient
-Instanz selten eine Überprüfung auf Nachrichten von IoT Hub durch (mindestens alle 25 Minuten).Mqtt
MqttWs
AmqpWs
Installieren Sie die erforderlichen Transportprotokolle auf Ihrem Computer.
Mit diesem Befehl wird beispielsweise das Amqp
-Protokoll installiert:
npm install azure-iot-device-amqp --save
Weitere Informationen zu den Unterschieden zwischen der Unterstützung für MQTT, AMQP und HTTPS finden Sie unter Leitfaden zur C2D-Kommunikation und Auswählen eines Kommunikationsprotokolls.
Erstellen eines Clientobjekts
Erstellen Sie ein Client
-Objekt mithilfe des installierten Pakets.
Zum Beispiel:
const Client = require('azure-iot-device').Client;
Erstellen eines Protokollobjekts
Erstellen Sie ein Protocol
-Objekt mithilfe eines installierten Transportpakets.
In diesem Beispiel wird das AMQP-Protokoll zugewiesen:
const Protocol = require('azure-iot-device-amqp').Amqp;
Fügen Sie die Verbindungszeichenfolge des Geräts und das Transportprotokoll hinzu
Rufen Sie fromConnectionString auf, um Verbindungsparameter für das Gerät zu liefern:
- connStr – Abrufen der Verbindungszeichenfolge für das Gerät.
- transportCtor: Das Transportprotokoll
In diesem Beispiel wird das Amqp
-Transportprotokoll verwendet:
const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Öffnen der Verbindung mit IoT Hub
Verwenden Sie die Methode open, um eine Verbindung zwischen einem IoT-Gerät und IoT Hub zu öffnen.
Zum Beispiel:
client.open(function(err) {
if (err) {
console.error('error connecting to hub: ' + err);
process.exit(1);
}
})
Erstellen eines Rückrufs direkter Methode
Rufen Sie onDeviceMethod auf, um eine Rückrufhandlerfunktion oder Coroutine zu erstellen, die aufgerufen wird, wenn eine direkte Methode empfangen wird. Der Listener ist einem Methodennamen-Schlüsselwort zugeordnet, z. B. „reboot“. Der Methodenname kann in einer IoT Hub- oder Back-End-Anwendung verwendet werden, um die Rückrufmethode auf dem Gerät auszulösen.
Die Rückrufhandlerfunktion sollte response.send
aufrufen, um eine Antwortbestätigungsnachricht an die aufrufende Anwendung zu senden.
In diesem Beispiel wird ein Handler für die direkte Methode mit dem Namen onReboot
eingerichtet, der aufgerufen wird, wenn der Name der direkten Methode „reboot“ verwendet wird.
client.onDeviceMethod('reboot', onReboot);
In diesem Beispiel implementiert die Rückrufmethode onReboot
die direkte Methode auf dem Gerät. Der Code wird ausgeführt, wenn die direkte Methode „reboot“ von einer Dienstanwendung aufgerufen wird. Die Funktion ruft response.send
auf, um eine Antwortbestätigungsnachricht an die aufrufende Anwendung zu senden.
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!');
};
Beispiele für SDK-Geräte
Das Azure IoT SDK für Node.js bietet Arbeitsbeispiele von Geräte-Apps, die Geräteverwaltungsaufgaben verarbeiten. Weitere Informationen finden Sie unter:
Erstellen einer Back-End-Anwendung
In diesem Abschnitt wird beschrieben, wie Sie eine direkte Methode auf einem Gerät aufrufen.
Dienst-SDK-Paket installieren
Führen Sie diesen Befehl aus, um azure-iothub auf Ihrem Computer zu installieren:
npm install azure-iothub --save
Herstellen einer Verbindung mit dem IoT-Hub
Sie können einen Back-End-Dienst mit IoT Hub mithilfe der folgenden Methoden verbinden:
- SAS-Richtlinie
- Microsoft Entra
Wichtig
Dieser Artikel enthält Schritte zum Herstellen einer Verbindung mit einem Dienst mithilfe einer Shared Access Signature. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung bei einem Dienst mit Microsoft Entra ID oder verwalteten Identitäten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Cloudsicherheit.
Herstellen einer Verbindung mithilfe einer SAS-Richtlinie
Verwenden Sie fromConnectionString, um eine Verbindung mit dem IoT-Hub herzustellen.
Ihr Dienst muss über die Berechtigung Dienstverbindung verfügen, um über IoT Hub eine direkte Methode auf einem Gerät aufrufen zu können. Standardmäßig wird jeder IoT-Hub mit einer SAS-Richtlinie namens service erstellt, die diese Berechtigung erteilt.
Geben Sie als Parameter für CreateFromConnectionString
die Verbindungszeichenfolge der SAS-Richtlinie für den Dienst an. Weitere Informationen zu SAS-Richtlinien finden Sie unter Steuer des Zugriffs auf IoT Hub mithilfe von Shared Access Signatures.
var Client = require('azure-iothub').Client;
var connectionString = '{IoT hub shared access policy connection string}';
var client = Client.fromConnectionString(connectionString);
Verbinden mit Microsoft Entra
Eine Back-End-App, die Microsoft Entra verwendet, muss erfolgreich authentifiziert werden und Anmeldeinformationen für Sicherheitstoken erhalten, bevor Sie eine Verbindung mit IoT Hub herstellen. Dieses Token wird an eine IoT Hub-Verbindungsmethode übergeben. Allgemeine Informationen zum Einrichten und Verwenden von Microsoft Entra für IoT Hub finden Sie unter Steuern des Zugriffs auf IoT Hub mithilfe von Microsoft Entra ID.
Eine Übersicht über Node.js SDK-Authentifizierung finden Sie unter:
- Erste Schritte mit der Benutzerauthentifizierung in Azure
- Azure Identity-Clientbibliothek für JavaScript
Konfigurieren der Microsoft Entra-App
Sie müssen eine Microsoft Entra-App einrichten, die für Ihre bevorzugten Authentifizierungsanmeldeinformationen konfiguriert ist. Die App enthält Parameter wie den geheimen Clientschlüssel, der von der Back-End-Anwendung zur Authentifizierung verwendet wird. Die verfügbaren Konfigurationen für die App-Authentifizierung sind:
- Geheimer Clientschlüssel
- Zertifikat
- Anmeldeinformationen für Verbundidentität
Microsoft Entra-Apps erfordern je nach ausgeführten Vorgängen möglicherweise bestimmte Rollenberechtigungen. Beispielsweise ist IoT Hub Twin Contributor erforderlich, um Lese- und Schreibzugriff auf ein IoT Hub-Gerät und Modulzwilling zu ermöglichen. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf IoT Hub mithilfe der Azure RBAC-Rollenzuweisung.
Weitere Informationen zum Einrichten einer Microsoft Entra-App finden Sie in der Schnellstartanleitung: Registrieren einer Anwendung bei der Microsoft Identitäts-Plattform.
Authentifizieren mithilfe von DefaultAzureCredential
Die einfachste Möglichkeit, Microsoft Entra zum Authentifizieren einer Back-End-Anwendung zu verwenden, besteht darin, DefaultAzureCredential zu verwenden. Es wird jedoch empfohlen, eine andere Methode in einer Produktionsumgebung zu verwenden, einschließlich einer bestimmten TokenCredential
oder analysierten ChainedTokenCredential
. Der Einfachheit halber beschreibt dieser Abschnitt die Authentifizierung mit DefaultAzureCredential
und den geheimen Clientschlüssel.
Weitere Informationen zu den Vor- und Nachteilen der Verwendung von DefaultAzureCredential
finden Sie unter Anmeldeinformationsketten in der Azure Identity-Clientbibliothek für JavaScript
DefaultAzureCredential unterstützt verschiedene Authentifizierungsmechanismen und bestimmt den entsprechenden Anmeldeinformationstyp basierend auf der Umgebung, in der er ausgeführt wird. Er versucht, mehrere Anmeldeinformationstypen in einer Reihenfolge zu verwenden, bis er eine funktionierende Anmeldeinformation findet.
Microsoft Entra erfordert dieses Paket:
npm install --save @azure/identity
In diesem Beispiel wurden Clientschlüssel, Client-ID und Mandanten-ID der Microsoft Entra-App zu Umgebungsvariablen hinzugefügt. Diese Umgebungsvariablen werden von DefaultAzureCredential
verwendet, um die Anwendung zu authentifizieren. Das Ergebnis einer erfolgreichen Microsoft Entra-Authentifizierung ist eine Sicherheitstoken-Anmeldeinformation, die an eine IoT Hub-Verbindungsmethode übergeben wird.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
Das resultierende Anmeldeinformationstoken kann dann an fromTokenCredential übergeben werden, um eine Verbindung mit IoT Hub für jeden SDK-Client herzustellen, der Microsoft Entra-Anmeldeinformationen akzeptiert:
fromTokenCredential
erfordert zwei Parameter:
- Die Azure-Dienst-URL – Die Azure-Dienst-URL sollte im Format
{Your Entra domain URL}.azure-devices.net
ohne einhttps://
-Präfix vorliegen. Beispiel:MyAzureDomain.azure-devices.net
. - Das Azure-Anmeldeinformationstoken
In diesem Beispiel werden die Azure-Anmeldeinformationen mithilfe von DefaultAzureCredential
erlangt. Die Azure-Domänen-URL und Anmeldeinformationen werden dann an Registry.fromTokenCredential
bereitgestellt, um die Verbindung mit IoT Hub zu erstellen.
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);
Codebeispiele
Arbeitsbeispiele für die Microsoft Entra-Dienstauthentifizierung finden Sie in Azure-Identitätsbeispielen.
Aufrufen einer Methode auf einem Gerät
Verwenden Sie invokeDeviceMethod, um eine direkte Methode anhand des Namens auf einem Gerät aufzurufen. Der Methodennamenparameter identifiziert die direkte Methode.
In diesem Beispiel wird die Methode „reboot“ aufgerufen, um einen Neustart auf dem Gerät zu initiieren. Die Methode „reboot“ wird einer Rückrufhandlerfunktion auf dem Gerät zugeordnet, wie im Abschnitt Erstellen eines Rückrufs direkter Methode in diesem Artikel beschrieben.
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-Dienstbeispiele
Das Azure IoT SDK für Node.js bietet Arbeitsbeispiele von Dienst-Apps, die Geräteverwaltungsaufgaben verarbeiten. Weitere Informationen finden Sie unter: