Delen via


Upload bestanden van een apparaat naar de cloud met Azure IoT Hub

Dit artikel laat zien hoe je dat doet:

  • Gebruik de bestand-uploadmogelijkheden van IoT Hub om een bestand naar Azure Blob Storage te uploaden, met behulp van Azure IoT-apparaat en service SDK's.
  • Laat IoT Hub weten dat het bestand is geüpload en maak een back-endservice voor het ontvangen van meldingen voor het uploaden van bestanden van IoT Hub, met behulp van de Azure IoT-service-SDK's.

In sommige scenario's kunt u de gegevens die uw apparaten verzenden niet gemakkelijk vertalen naar de relatief kleine apparaat-naar-cloudberichten die IoT Hub accepteert. De mogelijkheden voor bestandsupload in IoT Hub stellen je in staat om grote of complexe gegevens naar de cloud te verplaatsen. Voorbeeld:

  • Video 's
  • Grote bestanden die afbeeldingen bevatten
  • Trillingsgegevens bemonsterd met hoge frequentie
  • Een bepaalde vorm van voorbewerkte gegevens

Deze bestanden worden doorgaans batch verwerkt in de cloud, met behulp van tools zoals Azure Data Factory of de Hadoop-stack. Wanneer u bestanden vanaf een apparaat moet uploaden, kunt u nog steeds de beveiliging en betrouwbaarheid van de IoT Hub gebruiken. Dit artikel laat je zien hoe het moet.

Dit artikel is bedoeld om bijkomende ondersteuning te bieden aan uitvoerbare SDK-voorbeelden die in dit artikel worden genoemd.

Voor meer informatie, zie:

Belangrijk

De functionaliteit voor het uploaden van bestanden op apparaten die gebruikmaken van X.509-verificatie van certificeringsinstantie (CA) is in openbare preview en de preview-modus moet zijn ingeschakeld. Het is over het algemeen beschikbaar op apparaten die gebruikmaken van X.509-vingerafdrukverificatie of X.509-certificaatattestatie met Azure Device Provisioning Service. Meer informatie over X.509-authenticatie met IoT Hub, zie Ondersteunde X.509-certificaten.

Vereiste voorwaarden

  • Een IoT-hub. Voor sommige SDK-aanroepen is de primaire verbindingsreeks van IoT Hub vereist, dus noteer de verbindingsreeks.

  • Een geregistreerd apparaat. Sommige SDK-aanroepen vereisen de primaire verbindingsreeks van het apparaat, dus maak een notitie van de verbindingsreeks.

  • IoT Hub Service Connect-machtiging - Om berichten voor bestandsuploadmeldingen te ontvangen, heeft uw backendservice de Service Connect-machtiging nodig. Standaard wordt elke IoT Hub gemaakt met een gedeeld toegangsbeleid met de naam service die deze machtiging verleent. Voor meer informatie, zie Connect to an IoT hub.

  • Configureer bestandsupload in je IoT-hub door een verbinding te maken met een Azure Storage-account en een Azure Blob Storage-container. U kunt deze configureren met behulp van de Azure portal, Azure CLI, of Azure PowerShell.

Overzicht

Deze handleiding bevat twee secties:

  • Upload een bestand vanuit een apparaattoepassing
  • Ontvang melding van bestandsupload in een backendtoepassing

Upload een bestand vanuit een apparaattoepassing

Deze sectie beschrijft hoe je een bestand van een apparaat naar een IoT-hub kunt uploaden met behulp van de DeviceClient-klasse in de Azure IoT SDK voor .NET.

Volg deze procedure om een bestand van een apparaat te uploaden naar de IoT-hub:

  1. Verbinding maken met IoT Hub
  2. Een SAS-URI ophalen van IoT-hub
  3. Upload het bestand naar Azure-opslag
  4. IoT-hub op de hoogte stellen van de status van het uploaden van bestanden

Een apparaat verbinden met IoT Hub

Een apparaat-app kan zich bij IoT Hub authentiseren met gebruik van de volgende methoden:

  • X.509-certificaat
  • Gedeelde toegangssleutel

Verifieer met behulp van een X.509-certificaat

Om een apparaat te verbinden met IoT Hub met behulp van een X.509-certificaat:

  1. Gebruik DeviceAuthenticationWithX509Certificate om een object te maken dat apparaat- en certificaatgegevens bevat. DeviceAuthenticationWithX509Certificate wordt doorgegeven als de tweede parameter aan DeviceClient.Create (stap 2).

  2. Gebruik DeviceClient.Create om het apparaat met IoT Hub te verbinden met een X.509-certificaat.

In dit voorbeeld worden apparaat- en certificaatinformatie ingevuld in het authDeviceAuthenticationWithX509Certificate object dat aan DeviceClient.Create wordt doorgegeven.

Dit voorbeeld toont certificaatinvoeraparameterwaarden als lokale variabelen voor duidelijkheid. In een productiesysteem sla je gevoelige invoerparameters op in omgevingsvariabelen of een andere veiligere opslaglocatie. Gebruik bijvoorbeeld Environment.GetEnvironmentVariable("HOSTNAME") om de omgevingsvariabele van de hostnaam te lezen.

RootCertPath = "~/certificates/certs/sensor-thl-001-device.cert.pem";
Intermediate1CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate1.cert.pem";
Intermediate2CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate2.cert.pem";
DevicePfxPath = "~/certificates/certs/sensor-thl-001-device.cert.pfx";
DevicePfxPassword = "1234";
DeviceName = "MyDevice";
HostName = "xxxxx.azure-devices.net";

var chainCerts = new X509Certificate2Collection();
chainCerts.Add(new X509Certificate2(RootCertPath));
chainCerts.Add(new X509Certificate2(Intermediate1CertPath));
chainCerts.Add(new X509Certificate2(Intermediate2CertPath));
using var deviceCert = new X509Certificate2(DevicePfxPath, DevicePfxPassword);
using var auth = new DeviceAuthenticationWithX509Certificate(DeviceName, deviceCert, chainCerts);

using var deviceClient = DeviceClient.Create(
    HostName,
    auth,
    TransportType.Amqp);

Zie voor meer informatie over certificaatverificatie:

Codevoorbeelden

Zie voor werkende voorbeelden van apparaat X.509-certificaatverificatie:

Verifieer met behulp van een gedeelde toegangssleutel

Roep CreateFromConnectionString aan om verbinding te maken met het apparaat. Geef de primaire verbindingsreeks van het apparaat door.

AMQP is het standaard transportprotocol.

static string connectionString = "{device primary connection string}";
deviceClient = DeviceClient.CreateFromConnectionString(connectionString);

Een SAS-URI ophalen van IoT-hub

Roep GetFileUploadSasUriAsync aan om details over het uploaden van bestanden te verkrijgen. De SAS URI wordt in de volgende stap gebruikt om een bestand van een apparaat naar Blob Storage te uploaden.

const string filePath = "TestPayload.txt";
using var fileStreamSource = new FileStream(filePath, FileMode.Open);
var fileName = Path.GetFileName(fileStreamSource.Name);
var fileUploadSasUriRequest = new FileUploadSasUriRequest
{
    BlobName = fileName
};

FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest, System.Threading.CancellationToken cancellationToken = default);
Uri uploadUri = sasUri.GetBlobUri();

Een bestand uploaden naar Azure-opslag

Om een bestand naar Azure Storage te uploaden:

  1. Maak een blockBlobClient-object aan door een URI voor bestandsupload mee te geven.

  2. Gebruik de UploadAsync methode om een bestand naar Blob Storage te uploaden met de SAS URI. Je kunt optioneel Blob-uploadopties en annulerings-tokenparameters toevoegen.

De Azure Blob-client gebruikt altijd HTTPS als protocol om het bestand naar Azure Storage te uploaden.

In dit voorbeeld wordt de SAS-URI doorgegeven om een Azure Storage block Blob-client te maken en het bestand te uploaden.

var blockBlobClient = new BlockBlobClient(uploadUri);
await blockBlobClient.UploadAsync(fileStreamSource, null, null);

IoT-hub op de hoogte stellen van de status van het uploaden van bestanden

Gebruik CompleteFileUploadAsync om de IoT-hub te informeren dat de apparaatclient de upload heeft voltooid, door een FileUploadCompletionNotification-object door te geven. De IsSuccess vlag geeft aan of het uploaden is gelukt of niet. Nadat de melding is ontvangen, zal de IoT-hub de middelen die verband houden met de upload vrijgeven (de SAS URI).

Als meldingen voor het uploaden van bestanden zijn ingeschakeld, verzendt IoT Hub een meldingsbericht voor het uploaden van bestanden naar back-endservices die zijn geconfigureerd voor meldingen voor het uploaden van bestanden.

var successfulFileUploadCompletionNotification = new FileUploadCompletionNotification
{
    // Mandatory. Must be the same value as the correlation id returned in the sas uri response
    CorrelationId = sasUri.CorrelationId,

    // Mandatory. Will be present when service client receives this file upload notification
    IsSuccess = true,

    // Optional, user defined status code. Will be present when service client receives this file upload notification
    StatusCode = 200,

    // Optional, user-defined status description. Will be present when service client receives this file upload notification
    StatusDescription = "Success"
};

await _deviceClient.CompleteFileUploadAsync(successfulFileUploadCompletionNotification);

Voorbeeld van het uploaden van SDK-bestanden

De SDK bevat dit voorbeeld van een bestandsupload.

Ontvang een melding van het uploaden van een bestand in een backendtoepassing.

Je kunt een backend-service creëren om meldingen van bestanduploads van IoT Hub te ontvangen.

De klasse ServiceClient bevat methoden die services kunnen gebruiken om uploadmeldingen van bestanden te ontvangen.

Voeg service NuGet-pakket toe

Backendservice-applicaties vereisen het NuGet-pakket Microsoft.Azure.Devices.

Verbinding maken met IoT Hub

U kunt een backend-service koppelen aan IoT Hub met behulp van de volgende methoden:

  • Gedeeld toegangsbeleid
  • Microsoft Entra

Belangrijk

Dit artikel bevat stappen om verbinding te maken met een dienst met behulp van een gedeelde toegangshandtekening. Deze authenticatiemethode is handig voor testen en evaluatie, maar authenticeren bij een service met Microsoft Entra ID of beheerde identiteiten is een veiligere aanpak. Voor meer informatie verwijzen wij u naar Beveiligingsrichtlijnen voor IoT-oplossingen > Cloudbeveiliging.

Maak verbinding met behulp van een gedeeld toegangsbeleid

Verbind een backend-applicatie met een apparaat met behulp van CreateFromConnectionString. Uw applicatie heeft service connect toestemming. Lever deze gedeelde toegangspolicy-verbindingstring als een parameter aan fromConnectionString. Voor meer informatie over gedeelde toegangsbeleidsregels, zie Toegang tot IoT Hub beheren met gedeelde toegangshandtekeningen.

Voorbeeld:

using Microsoft.Azure.Devices;
static ServiceClient serviceClient;
static string connectionString = "{Shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

Verbinding maken met Microsoft Entra

Een backend-app die Microsoft Entra gebruikt, moet zich met succes authenticeren en een beveiligingstokenreferentie verkrijgen voordat het verbinding maakt met de IoT Hub. Dit token wordt doorgegeven aan een IoT Hub verbindingsmethode. Voor algemene informatie over het instellen en gebruiken van Microsoft Entra voor IoT Hub, zie Toegang tot IoT Hub beheren met behulp van Microsoft Entra ID.

Microsoft Entra-app configureren

U moet een Microsoft Entra-app instellen die is geconfigureerd voor uw voorkeurs authenticatiegegevens. De app bevat parameters zoals de clientgeheimen die door de backendtoepassing worden gebruikt voor authenticatie. Beschikbare verificatieconfiguraties voor apps zijn:

  • Klantgeheim
  • Certificaat
  • Geconsolideerde identiteit credential

Voor Microsoft Entra-apps zijn mogelijk specifieke rolmachtigingen vereist, afhankelijk van bewerkingen die worden uitgevoerd. Voorbeeld: IoT Hub Twin Contributor is vereist om lees- en schrijftoegang tot een IoT Hub-apparaat en module twins mogelijk te maken. Zie Toegang tot IoT Hub beheren met behulp van Azure RBAC-roltoewijzing voor meer informatie.

Voor meer informatie over het instellen van een Microsoft Entra-app, zie Quickstart: Een applicatie registreren bij het Microsoft-identiteitsplatform.

Authenticeren met DefaultAzureCredential

De gemakkelijkste manier om Microsoft Entra te gebruiken om een backend-applicatie te authentiseren, is door DefaultAzureCredential te gebruiken. Echter, het wordt aanbevolen om in een productieomgeving een andere methode te gebruiken, inclusief een specifieke TokenCredential of vereenvoudigde ChainedTokenCredential. Voor de eenvoud beschrijft dit gedeelte authenticatie met behulp van DefaultAzureCredential en Clientgeheim. Voor meer informatie over de voor- en nadelen van het gebruik van DefaultAzureCredential, zie Gebruiksrichtlijnen voor DefaultAzureCredential.

DefaultAzureCredential ondersteunt verschillende authenticatiemechanismen en bepaalt het juiste type referentie op basis van de omgeving waarin het wordt uitgevoerd. Het probeert meerdere typen referenties in een bepaalde volgorde te gebruiken totdat het een werkende referentie vindt.

Microsoft Entra vereist deze NuGet-pakketten en bijbehorende using instructies:

  • Azure.Core
  • Azure.Identity
using Azure.Core;
using Azure.Identity;

In dit voorbeeld worden clientgeheim, client-id en tenant-id van Microsoft Entra-app-registratie toegevoegd aan omgevingsvariabelen. Deze omgevingsvariabelen worden gebruikt om DefaultAzureCredential de toepassing te verifiëren. Het resultaat van een geslaagde Microsoft Entra-verificatie is een beveiligingstokenreferentie die wordt doorgegeven aan een IoT Hub-verbindingsmethode.

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();

Het resulterende TokenCredential kan vervolgens worden doorgegeven aan een verbindingsmethode met IoT Hub voor elke SDK-client die Microsoft Entra-gegevens accepteert.

In dit voorbeeld wordt de TokenCredential doorgegeven aan ServiceClient.Create om een ServiceClient verbinding object te creëren.

string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);

In dit voorbeeld wordt de TokenCredential doorgegeven aan RegistryManager.Create om een RegistryManager-object te creëren.

string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Codevoorbeeld

Zie Het voorbeeld van verificatie op basis van rollen voor een werkende voorbeeld van Microsoft Entra-serviceverificatie.

Ontvang melding van bestandsupload

Om een melding voor bestandupload te ontvangen:

  1. Maak een CancellationToken.
  2. Roep GetFileNotificationReceiver aan om een meldingsontvanger te maken.
  3. Gebruik een lus met ReceiveAsync om te wachten op de melding van het uploaden van het bestand.

Voorbeeld:

// Define the cancellation token
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;

// Create a notification receiver
var notificationReceiver = serviceClient.GetFileNotificationReceiver();
Console.WriteLine("\nReceiving file upload notification from service");

// Check for file upload notifications
while (true)
{
    var fileUploadNotification = await notificationReceiver.ReceiveAsync(token);
    if (fileUploadNotification == null) continue;
    Console.ForegroundColor = ConsoleColor.Yellow;
    Console.WriteLine("Received file upload notification: {0}", 
        string.Join(", ", fileUploadNotification.BlobName));
    Console.ResetColor();
    await notificationReceiver.CompleteAsync(fileUploadNotification);
}

Voorbeeld van SDK-bestandsuploadontvanger

De SDK bevat dit voorbeeld van een bestandsupload-ontvanger.

Overzicht

Deze handleiding bevat twee secties:

  • Upload een bestand vanuit een apparaattoepassing
  • Ontvang melding van bestandsupload in een backendtoepassing

Upload een bestand vanuit een apparaattoepassing

Dit gedeelte beschrijft hoe je een bestand kunt uploaden van een apparaat naar een IoT-hub met behulp van de DeviceClient klasse uit de Azure IoT SDK voor Java.

Volg deze procedure om een bestand van een apparaat te uploaden naar de IoT-hub:

  1. Het apparaat verbinden met IoT Hub
  2. Een SAS-URI ophalen van IoT-hub
  3. Upload het bestand naar Azure Storage
  4. Verzend melding van bestand uploadstatus naar IoT-hub

Een apparaat verbinden met IoT Hub

Een apparaat-app kan zich bij IoT Hub authentiseren met gebruik van de volgende methoden:

  • X.509-certificaat
  • Gedeelde toegangssleutel

Verifieer met behulp van een X.509-certificaat

Om een apparaat te verbinden met IoT Hub met behulp van een X.509-certificaat:

  1. Bouw het SSLContext-object met buildSSLContext.
  2. Voeg de SSLContext informatie toe aan een ClientOptions-object.
  3. Roep DeviceClient aan gebruik makend van de ClientOptions informatie om de apparaat-tot-IoT Hub verbinding te creëren.

Dit voorbeeld toont certificaatinvoeraparameterwaarden als lokale variabelen voor duidelijkheid. In een productiesysteem sla je gevoelige invoerparameters op in omgevingsvariabelen of een andere veiligere opslaglocatie. Gebruik bijvoorbeeld Environment.GetEnvironmentVariable("PUBLICKEY") om een omgevingsvariabele voor een openbare sleutelcertificaatreeks te lezen.

private static final String publicKeyCertificateString =
        "-----BEGIN CERTIFICATE-----\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "-----END CERTIFICATE-----\n";

//PEM encoded representation of the private key
private static final String privateKeyString =
        "-----BEGIN EC PRIVATE KEY-----\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "-----END EC PRIVATE KEY-----\n";

SSLContext sslContext = SSLContextBuilder.buildSSLContext(publicKeyCertificateString, privateKeyString);
ClientOptions clientOptions = ClientOptions.builder().sslContext(sslContext).build();
DeviceClient client = new DeviceClient(connString, protocol, clientOptions);

Zie voor meer informatie over certificaatverificatie:

Codevoorbeelden

Zie voor werkende voorbeelden van apparaat X.509-certificaatverificatie:

Verifieer met behulp van een gedeelde toegangssleutel

Bestandsoverdrachten gebruiken altijd HTTPS, maar DeviceClient kan het IotHubClientProtocol definiëren voor andere diensten zoals telemetrie, apparaatmethode en apparaattweeling.

IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;

Initialiseer de DeviceClient om verbinding te maken met het apparaat met behulp van de primaire verbindingsstring van het apparaat.

String connString = "{IoT hub connection string}";
DeviceClient client = new DeviceClient(connString, protocol);

Een SAS-URI ophalen van IoT-hub

Roep getFileUploadSasUri aan om een FileUploadSasUriResponse-object te verkrijgen.

FileUploadSasUriResponse omvat deze methoden en retourwaarden. De returnwaarden kunnen worden doorgegeven aan bestanduploadmethoden.

Methode Retourwaarde
getCorrelationId() Correlatie-ID
getContainerName() Naam van de container
getBlobName() Blob-naam
getBlobUri() Blob-URI

Voorbeeld:

FileUploadSasUriResponse sasUriResponse = client.getFileUploadSasUri(new FileUploadSasUriRequest(file.getName()));

System.out.println("Successfully got SAS URI from IoT hub");
System.out.println("Correlation Id: " + sasUriResponse.getCorrelationId());
System.out.println("Container name: " + sasUriResponse.getContainerName());
System.out.println("Blob name: " + sasUriResponse.getBlobName());
System.out.println("Blob Uri: " + sasUriResponse.getBlobUri());

Upload het bestand naar Azure Storage

Geef het blob-URI-eindpunt door aan BlobClientBuilder.buildclient om het BlobClient-object te maken.

BlobClient blobClient =
    new BlobClientBuilder()
        .endpoint(sasUriResponse.getBlobUri().toString())
        .buildClient();

Roep uploadFromFile aan om het bestand naar Blob Storage te uploaden.

String fullFileName = "Path of the file to upload";
blobClient.uploadFromFile(fullFileName);

Verzend melding van bestand uploadstatus naar IoT-hub

Verstuur na een poging tot bestandsupload een statusmelding naar de IoT-hub.

Maak een FileUploadCompletionNotification-object . Geef de successtatus van het uploaden van bestanden door van correlationId en isSuccess. Geef een isSuccesstrue waarde door wanneer het uploaden van bestanden is gelukt, false wanneer dat niet het geval is.

FileUploadCompletionNotification moet worden aangeroepen, zelfs wanneer het uploaden van het bestand mislukt. IoT-hub heeft een vast aantal SAS-URI's dat op elk moment actief mag zijn. Zodra je klaar bent met het uploaden van het bestand, moet je je SAS URI vrijmaken zodat er een nieuwe SAS URI gegenereerd kan worden. Als een SAS-URI niet via deze API wordt vrijgegeven, dan wordt het uiteindelijk vanzelf vrijgegeven, afhankelijk van hoe lang SAS-URI's zijn geconfigureerd om op een IoT-hub te blijven.

Dit voorbeeld geeft een succesvolle status door.

FileUploadCompletionNotification completionNotification = new FileUploadCompletionNotification(sasUriResponse.getCorrelationId(), true);
client.completeFileUpload(completionNotification);

Sluit de client

Maak de client middelen vrij.

client.closeNow();

Maak een backend-applicatie.

Dit gedeelte beschrijft hoe u een melding ontvangt van een bestand dat wordt geüpload in een backendapplicatie.

De klasse ServiceClient bevat methoden die services kunnen gebruiken om uploadmeldingen van bestanden te ontvangen.

Importverklaringen toevoegen

Voeg deze import-verklaringen toe om de Azure IoT Java SDK en uitzonderingafhandeling te gebruiken.

import com.microsoft.azure.sdk.iot.service.*;
import java.io.IOException;
import java.net.URISyntaxException;

Verbinding maken met de IoT Hub

U kunt een backend-service koppelen aan IoT Hub met behulp van de volgende methoden:

  • Gedeeld toegangsbeleid
  • Microsoft Entra

Belangrijk

Dit artikel bevat stappen om verbinding te maken met een dienst met behulp van een gedeelde toegangshandtekening. Deze authenticatiemethode is handig voor testen en evaluatie, maar authenticeren bij een service met Microsoft Entra ID of beheerde identiteiten is een veiligere aanpak. Voor meer informatie verwijzen wij u naar Beveiligingsrichtlijnen voor IoT-oplossingen > Cloudbeveiliging.

Maak verbinding met behulp van een gedeeld toegangsbeleid

Definieer het verbindingsprotocol

Gebruik IotHubServiceClientProtocol om het toepassingslaagprotocol te definiëren dat door de serviceclient wordt gebruikt om met een IoT Hub te communiceren.

IotHubServiceClientProtocol accepteert alleen de AMQPS of AMQPS_WS opsomming.

private static final IotHubServiceClientProtocol protocol =    
    IotHubServiceClientProtocol.AMQPS;
Maak het ServiceClient-object

Maak het ServiceClient-object aan en voorzie het van de IoT Hub-verbindingstekenreeks en het protocol.

Als u een bestand op een apparaat wilt uploaden naar IoT Hub, heeft uw service de machtiging voor serviceverbinding nodig. Standaard wordt elke IoT Hub gemaakt met een gedeeld toegangsbeleid met de naam service die deze machtiging verleent.

Geef de gedeelde toegangspolicy van de ServiceClient als parameter aan de constructor door. Voor meer informatie over gedeelde toegangsbeleidsregels, zie Toegang tot IoT Hub beheren met gedeelde toegangshandtekeningen.

String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
private static final ServiceClient serviceClient (iotHubConnectionString, protocol);
Open de verbinding tussen applicatie en IoT Hub

Open de AMQP-zenderverbinding. Deze methode creëert de verbinding tussen de applicatie en IoT Hub.

serviceClient.open();

Verbinding maken met Microsoft Entra

Een backend-app die Microsoft Entra gebruikt, moet zich met succes authenticeren en een beveiligingstokenreferentie verkrijgen voordat het verbinding maakt met de IoT Hub. Dit token wordt doorgegeven aan een IoT Hub verbindingsmethode. Voor algemene informatie over het instellen en gebruiken van Microsoft Entra voor IoT Hub, zie Toegang tot IoT Hub beheren met behulp van Microsoft Entra ID.

Voor een overzicht van Java SDK-authenticatie, zie Azure-authenticatie met Java en Azure Identity.

Voor de eenvoud richt dit gedeelte zich op het beschrijven van authenticatie met behulp van een cliëntgeheim.

Microsoft Entra-app configureren

U moet een Microsoft Entra-app instellen die is geconfigureerd voor uw voorkeurs authenticatiegegevens. De app bevat parameters zoals de clientgeheimen die door de backendtoepassing worden gebruikt voor authenticatie. Beschikbare verificatieconfiguraties voor apps zijn:

  • Klantgeheim
  • Certificaat
  • Geconsolideerde identiteit credential

Voor Microsoft Entra-apps zijn mogelijk specifieke rolmachtigingen vereist, afhankelijk van bewerkingen die worden uitgevoerd. Voorbeeld: IoT Hub Twin Contributor is vereist om lees- en schrijftoegang tot een IoT Hub-apparaat en module twins mogelijk te maken. Zie Toegang tot IoT Hub beheren met behulp van Azure RBAC-roltoewijzing voor meer informatie.

Voor meer informatie over het instellen van een Microsoft Entra-app, zie Quickstart: Een applicatie registreren bij het Microsoft-identiteitsplatform.

Authenticeren met DefaultAzureCredential

De gemakkelijkste manier om Microsoft Entra te gebruiken om een backend-applicatie te authentiseren, is door DefaultAzureCredential te gebruiken. Echter, het wordt aanbevolen om in een productieomgeving een andere methode te gebruiken, inclusief een specifieke TokenCredential of vereenvoudigde ChainedTokenCredential. Zie Referentieketens in de Azure Identity-clientbibliotheek voor Java voor meer informatie over de voor- en nadelen van het gebruik.DefaultAzureCredential

DefaultAzureCredential ondersteunt verschillende verificatiemechanismen en bepaalt het juiste referentietype op basis van de omgeving waarin het wordt uitgevoerd. Het probeert meerdere typen referenties in een bepaalde volgorde te gebruiken totdat het een werkende referentie vindt.

Je kunt Microsoft Entra-appreferenties authentiseren met behulp van DefaultAzureCredentialBuilder. Sla verbindingsparameters zoals tenantID, client-id en clientgeheimwaarden op als omgevingsvariabelen. Zodra de TokenCredential is gemaakt, geeft u het door aan ServiceClient of een andere builder als de parameter 'credential'.

In dit voorbeeld probeert DefaultAzureCredentialBuilder een verbinding te verifiëren uit de lijst beschreven in DefaultAzureCredential. Het resultaat van een succesvolle Microsoft Entra-authenticatie is een beveiligingstokenreferentie die wordt doorgegeven aan een constructor zoals ServiceClient.

TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Authenticeer met behulp van ClientSecretCredentialBuilder

U kunt ClientSecretCredentialBuilder gebruiken om een referentie te maken met behulp van clientgeheiminformatie. Als het succesvol is, retourneert deze methode een TokenCredential die kan worden doorgegeven aan ServiceClient of een andere bouwer als de 'credential' parameter.

In dit voorbeeld zijn de waarden voor de client secret, client-ID en tenant-ID voor de Microsoft Entra-appregistratie toegevoegd aan omgevingsvariabelen. Deze omgevingsvariabelen worden door ClientSecretCredentialBuilder gebruikt om de inloggegevens te bouwen.

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 authenticatieklassen

De Java SDK bevat ook deze klassen die een backend-app verifiëren met Microsoft Entra:

Codevoorbeelden

Voor voorbeeldimplementaties van Microsoft Entra-serviceauthenticatie, zie Rolgebaseerd authenticatievoorbeeld.

Controleer de status van de bestandupload

Om de status van het bestanden uploaden te controleren:

  1. Maak een getFileUploadNotificationReceiver object.
  2. Gebruik open om verbinding te maken met de IoT-hub.
  3. Bel receive om te controleren of de status van het uploaden van het bestand. Deze methode retourneert een fileUploadNotification-object . Als een uploadbericht wordt ontvangen, kunt u de velden met uploadstatus bekijken met behulp van de fileUploadNotification-methoden.

Voorbeeld:

FileUploadNotificationReceiver receiver = serviceClient.getFileUploadNotificationReceiver();
receiver.open();
FileUploadNotification fileUploadNotification = receiver.receive(2000);

if (fileUploadNotification != null)
{
    System.out.println("File Upload notification received");
    System.out.println("Device Id : " + fileUploadNotification.getDeviceId());
    System.out.println("Blob Uri: " + fileUploadNotification.getBlobUri());
    System.out.println("Blob Name: " + fileUploadNotification.getBlobName());
    System.out.println("Last Updated : " + fileUploadNotification.getLastUpdatedTimeDate());
    System.out.println("Blob Size (Bytes): " + fileUploadNotification.getBlobSizeInBytes());
    System.out.println("Enqueued Time: " + fileUploadNotification.getEnqueuedTimeUtcDate());
}
else
{
    System.out.println("No file upload notification");
}

// Close the receiver object
receiver.close();

SDK-bestand upload voorbeelden

Er zijn twee Java-bestanduploadvoorbeelden.

Pakketten installeren

De azure-iot-device-bibliotheek moet worden geïnstalleerd voordat een gerelateerde code wordt aangeroepen.

pip install azure-iot-device

Het pakket azure.storage.blob wordt gebruikt om het bestand te uploaden.

pip install azure.storage.blob

Upload een bestand vanaf een apparaatapplicatie

Deze sectie beschrijft hoe je een bestand van een apparaat naar een IoT-hub kunt uploaden met behulp van de IoTHubDeviceClient klasse uit de Azure IoT SDK voor Python.

Importeer bibliotheken

import os
from azure.iot.device import IoTHubDeviceClient
from azure.core.exceptions import AzureError
from azure.storage.blob import BlobClient

Een apparaat verbinden met IoT Hub

Een apparaat-app kan zich bij IoT Hub authentiseren met gebruik van de volgende methoden:

  • X.509-certificaat
  • Gedeelde toegangssleutel

Verifieer met behulp van een X.509-certificaat

Om een apparaat te verbinden met IoT Hub met behulp van een X.509-certificaat:

  1. Gebruik create_from_x509_certificate om de X.509-certificaatparameters toe te voegen.
  2. Roep connect aan om de apparaatclient te verbinden.

Dit voorbeeld toont certificaatinvoeraparameterwaarden als lokale variabelen voor duidelijkheid. In een productiesysteem sla je gevoelige invoerparameters op in omgevingsvariabelen of een andere veiligere opslaglocatie. Gebruik bijvoorbeeld os.getenv("HOSTNAME") om de omgevingsvariabele van de hostnaam te lezen.

# The Azure IoT hub name
hostname = "xxxxx.azure-devices.net"

# The device that has been created on the portal using X509 CA signing or self-signing capabilities
device_id = "MyDevice"

# The X.509 certificate file name
cert_file = "~/certificates/certs/sensor-thl-001-device.cert.pfx"
key_file = "~/certificates/certs/sensor-thl-001-device.cert.key"
# The optional certificate pass phrase
pass_phrase = "1234"

x509 = X509(
    cert_file,
    key_file,
    pass_phrase,
)

# The client object is used to interact with your Azure IoT hub.
device_client = IoTHubDeviceClient.create_from_x509_certificate(
    hostname=hostname, device_id=device_id, x509=x509
)

# Connect to IoT Hub
await device_client.connect()

Zie voor meer informatie over certificaatverificatie:

Codevoorbeelden

Zie de voorbeelden waarvan de bestandsnamen eindigen op x509 bij Async hub-scenario's voor werkvoorbeelden van X.509-certificaatauthenticatie.

Verifieer met behulp van een gedeelde toegangssleutel

Om een apparaat aan IoT Hub te koppelen:

  1. Roep create_from_connection_string aan om de primaire verbindingsreeks van het apparaat toe te voegen.
  2. Roep connect aan om de apparaatclient te verbinden.

Voorbeeld:

# Add your IoT hub primary connection string
CONNECTION_STRING = "{Device primary connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)

# Connect the client
device_client.connect()

Verkrijg Blob-opslag informatie

Roep get_storage_info_for_blob aan om informatie van een IoT-hub te verkrijgen over een gekoppelde Azure Storage-account. Deze informatie omvat de hostnaam, containern naam, blobnaam en een SAS-token. De get_storage_info_for_blob methode geeft ook een correlation_id, terug, die in de notify_blob_upload_status methode wordt gebruikt. Dit correlation_id is de manier van IoT Hub om aan te geven aan welke Blob je werkt.

# Get the storage info for the blob
PATH_TO_FILE = "{Full path to local file}"
blob_name = os.path.basename(PATH_TO_FILE)
blob_info = device_client.get_storage_info_for_blob(blob_name)

Upload een bestand naar Blob Storage

Om een bestand te uploaden naar Blob Storage:

  1. Gebruik from_blob_url om een BlobClient-object van een blob-URL te maken.
  2. Roep upload_blob op om het bestand te uploaden naar de Blob Storage.

In dit voorbeeld wordt de blob_info structuur geparseerd om een URL te maken die wordt gebruikt om een BlobClient te initialiseren. Vervolgens wordt aangeroepen upload_blob om het bestand te uploaden naar Blob Storage.

try:
    sas_url = "https://{}/{}/{}{}".format(
        blob_info["hostName"],
        blob_info["containerName"],
        blob_info["blobName"],
        blob_info["sasToken"]
    )

    print("\nUploading file: {} to Azure Storage as blob: {} in container {}\n".format(file_name, blob_info["blobName"], blob_info["containerName"]))

    # Upload the specified file
    with BlobClient.from_blob_url(sas_url) as blob_client:
        with open(file_name, "rb") as f:
            result = blob_client.upload_blob(f, overwrite=True)
            return (True, result)

except FileNotFoundError as ex:
    # catch file not found and add an HTTP status code to return in notification to IoT hub
    ex.status_code = 404
    return (False, ex)

except AzureError as ex:
    # catch Azure errors that might result from the upload operation
    return (False, ex)

IoT-hub op de hoogte stellen van de uploadstatus

Gebruik notify_blob_upload_status om IoT-hub op de hoogte te stellen van de status van de Blob Storage-operatie. Geef het correlation_id door verkregen via de get_storage_info_for_blob methode. Het correlation_id wordt door de IoT-hub gebruikt om elke service op de hoogte te stellen die mogelijk luistert naar een melding over de status van de taak voor het uploaden van bestanden.

In dit voorbeeld wordt de IoT-hub op de hoogte gesteld van een geslaagde bestandsupload:

device_client.notify_blob_upload_status(storage_info["correlationId"], True, 200, "OK: {}".format(PATH_TO_FILE)

Schakel de apparaatclient uit

Sluit de client af. Zodra deze methode wordt aangeroepen, leidt elke poging tot verdere clientaanroepen tot een ClientError.

device_client.shutdown()

SDK-bestand upload voorbeelden

Het SDK bevat twee voorbeelden van bestanduploads.

Overzicht

Dit artikel beschrijft hoe je de Azure IoT SDK voor Node.js kunt gebruiken om een apparaat-app te maken om een bestand te uploaden en een backend-serviceapplicatie om een melding van het uploaden van bestanden te ontvangen.

Een apparaattoepassing maken

Dit gedeelte beschrijft hoe u een bestand van een apparaat naar een IoT hub kunt uploaden met behulp van het azure-iot-device-pakket in de Azure IoT SDK voor Node.js.

Installeer SDK-pakketten

Voer deze opdracht uit om het azure-iot-device apparaat SDK, de azure-iot-device-mqtt, en de @azure/storage-blob pakketten op uw ontwikkelmachine te installeren:

npm install azure-iot-device azure-iot-device-mqtt @azure/storage-blob --save

Het azure-iot-device pakket bevat objecten die communiceren met IoT-apparaten.

Volg deze procedure om een bestand van een apparaat te uploaden naar de IoT-hub:

  1. Het apparaat verbinden met IoT Hub
  2. Verkrijg een gedelegeerde toegangshandtekening (SAS-token) van de IoT Hub.
  3. Upload het bestand naar Azure Storage
  4. Verzend melding van bestand uploadstatus naar IoT-hub

Modules maken

Maak Client-, Protocol-, fout- en padmodules met behulp van de geïnstalleerde pakketten.

const Protocol = require('azure-iot-device-mqtt').Mqtt;
const errors = require('azure-iot-common').errors;
const path = require('path');

Een apparaat verbinden met IoT Hub

Een apparaat-app kan zich bij IoT Hub authentiseren met gebruik van de volgende methoden:

  • X.509-certificaat
  • Gedeelde toegangssleutel

Verifieer met behulp van een X.509-certificaat

Het X.509-certificaat is gekoppeld aan het apparaat-naar-IoT Hub verbindingstransport.

Om een apparaat-naar-IoT Hub-verbinding te configureren met behulp van een X.509-certificaat:

  1. Roep fromConnectionString aan om de verbindingsreeks van het apparaat of identiteitsmodule, en het transporttype aan het Client object toe te voegen. Voeg x509=true toe aan de verbindingsreeks om aan te geven dat een certificaat wordt toegevoegd aan DeviceClientOptions. Voorbeeld:

    • Een apparaat-verbindingsreeks:

      HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true

    • Een verbindingsreeks voor een identiteitsmodule:

      HostName=xxxxx.azure-devices.net;DeviceId=Device-1;ModuleId=Module-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true

  2. Configureer een JSON-variabele met certificaatgegevens en geef deze door aan DeviceClientOptions.

  3. Roep setOptions aan om een X.509-certificaat en sleutel (en eventueel een wachtwoordzin) aan het clienttransport toe te voegen.

  4. Roep open om de verbinding van het apparaat naar IoT Hub te openen.

In dit voorbeeld ziet u informatie over certificaatconfiguratie in een JSON-variabele. De certificeringsconfiguratie clientOptions wordt doorgegeven aan setOptions en de verbinding wordt geopend met open.

const Client = require('azure-iot-device').Client;
const Protocol = require('azure-iot-device-mqtt').Mqtt;
// Connection string illustrated for demonstration only. Never hard-code the connection string in production. Instead use an environmental variable or other secure storage.
const connectionString = `HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true`
const client = Client.fromConnectionString(connectionString, Protocol);

var clientOptions = {
   cert: myX509Certificate,
   key: myX509Key,
   passphrase: passphrase,
   http: {
     receivePolicy: {
       interval: 10
     }
   }
 }

 client.setOptions(clientOptions);
 client.open(connectCallback);

Zie voor meer informatie over certificaatverificatie:

Codevoorbeeld

Zie Eenvoudig voorbeeldapparaat X.509 voor een werkend voorbeeld van X.509-certificaatverificatie.

Verifieer met behulp van een gedeelde toegangssleutel

Kies een transportprotocol

The Client-object ondersteunt deze protocollen:

  • Amqp
  • Http - Bij het gebruik van Http controleert het Client-exemplaar minder frequent op berichten van IoT Hub (minimaal om de 25 minuten).
  • Mqtt
  • MqttWs
  • AmqpWs

Installeer de benodigde transportprotocollen op je ontwikkelmachine.

Bijvoorbeeld, deze opdracht installeert het Amqp-protocol:

npm install azure-iot-device-amqp --save

Voor meer informatie over de verschillen tussen ondersteuning voor MQTT, AMQP en HTTPS, zie Communicatiehandleiding voor cloud-naar-apparaat en Kies een communicatieprotocol.

Een clientobject maken

Maak een Client object met behulp van het geïnstalleerde pakket.

Voorbeeld:

const Client = require('azure-iot-device').Client;
Maak een protocolobject

Maak een Protocol object met behulp van een geïnstalleerd transportpakket.

Dit voorbeeld wijst het AMQP-protocol toe:

const Protocol = require('azure-iot-device-amqp').Amqp;
Voeg de apparaatverbindingreeks en het transportprotocol toe

Aanroepen vanuitConnectionString om verbindingsparameters voor apparaten op te geven:

  • connStr - de verbindingsreeks van het apparaat.
  • transportCtor - Het transportprotocol.

In dit voorbeeld wordt het Amqp transportprotocol gebruikt:

const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
De verbinding met IoT Hub openen

Gebruik de open methode om verbinding te openen tussen een IoT-apparaat en IoT Hub.

Voorbeeld:

client.open(function(err) {
  if (err) {
    console.error('error connecting to hub: ' + err);
    process.exit(1);
  }
})

Verkrijg een SAS-token van de IoT-hub

Gebruik getBlobSharedAccessSignature om het gekoppelde opslagaccount SAS-token van IoT-hub te verkrijgen.

Voorbeeld:

// make sure you set these environment variables prior to running the sample.
const localFilePath = process.env.PATH_TO_FILE;
const storageBlobName = path.basename(localFilePath);
const blobInfo = await client.getBlobSharedAccessSignature(storageBlobName);
if (!blobInfo) {
throw new errors.ArgumentError('Invalid upload parameters');
}

Upload het bestand naar de IoT Hub

Om een bestand van een apparaat naar de IoT-hub te uploaden:

  1. Maak een stroomlijningspijplijn
  2. Construeer de blob-URL
  3. Maak een BlockBlobClient voor het uploaden van bestanden naar Blob Storage.
  4. Roep uploadFile aan om het bestand naar Blob Storage te uploaden
  5. Roep notifyBlobUploadStatus aan om de IoT-hub te informeren dat het uploaden is geslaagd of mislukt.

Voorbeeld:

// Open the pipeline
const pipeline = newPipeline(new AnonymousCredential(), {
retryOptions: { maxTries: 4 },
telemetry: { value: 'HighLevelSample V1.0.0' }, // Customized telemetry string
keepAliveOptions: { enable: false }
});

// Construct the blob URL
const { hostName, containerName, blobName, sasToken } = blobInfo;
const blobUrl = `https://${hostName}/${containerName}/${blobName}${sasToken}`;

// Create the BlockBlobClient for file upload to Blob Storage
const blobClient = new BlockBlobClient(blobUrl, pipeline);

// Setup blank status notification arguments to be filled in on success/failure
let isSuccess;
let statusCode;
let statusDescription;

const uploadStatus = await blobClient.uploadFile(localFilePath);
console.log('uploadStreamToBlockBlob success');

  try {
    const uploadStatus = await blobClient.uploadFile(localFilePath);
    console.log('uploadStreamToBlockBlob success');

    // Save successful status notification arguments
    isSuccess = true;
    statusCode = uploadStatus._response.status;
    statusDescription = uploadStatus._response.bodyAsText;

    // Notify IoT hub of upload to blob status (success)
    console.log('notifyBlobUploadStatus success');
  }
  catch (err) {
    isSuccess = false;
    statusCode = err.code;
    statusDescription = err.message;

    console.log('notifyBlobUploadStatus failed');
    console.log(err);
  }

// Send file upload status notification to IoT hub
await client.notifyBlobUploadStatus(blobInfo.correlationId, isSuccess, statusCode, statusDescription);

Upload het lokale bestand naar de blobopslag.

Je kunt een lokaal bestand uploaden naar blobopslag vanaf een computer.

const deviceClient = Client.fromConnectionString(deviceConnectionString, Protocol);
uploadToBlob(localFilePath, deviceClient)
  .catch((err) => {
    console.log(err);
  })
  .finally(() => {
    process.exit();
  });

Voorbeeld van het uploaden van SDK-bestanden

De SDK bevat een voorbeeld voor geavanceerd naar blob uploaden.

Maak een backend-applicatie.

Deze sectie beschrijft hoe je meldingen voor bestandsuploads ontvangt in een backend-toepassing.

De klasse ServiceClient bevat methoden die services kunnen gebruiken om uploadmeldingen van bestanden te ontvangen.

Installeer service-SDK-pakket

Voer deze opdracht uit om azure-iothub op uw ontwikkelmachine te installeren:

npm install azure-iothub --save

Verbinding maken met IoT Hub

U kunt een backend-service koppelen aan IoT Hub met behulp van de volgende methoden:

  • Gedeeld toegangsbeleid
  • Microsoft Entra

Belangrijk

Dit artikel bevat stappen om verbinding te maken met een dienst met behulp van een gedeelde toegangshandtekening. Deze authenticatiemethode is handig voor testen en evaluatie, maar authenticeren bij een service met Microsoft Entra ID of beheerde identiteiten is een veiligere aanpak. Voor meer informatie verwijzen wij u naar Beveiligingsrichtlijnen voor IoT-oplossingen > Cloudbeveiliging.

Maak verbinding met behulp van een gedeeld toegangsbeleid

Gebruik fromConnectionString om verbinding te maken met IoT Hub.

Om een bestand vanaf een apparaat te uploaden, heeft uw service de service connect-machtiging nodig. Standaard wordt elke IoT Hub gemaakt met een gedeeld toegangsbeleid met de naam service die deze machtiging verleent.

Lever de CreateFromConnectionString shared access policy connectiestring als een parameter voor aan. Voor meer informatie over gedeelde toegangsbeleidsregels, zie Toegang tot IoT Hub beheren met gedeelde toegangshandtekeningen.

var Client = require('azure-iothub').Client;
var connectionString = '{IoT hub shared access policy connection string}';
var client = Client.fromConnectionString(connectionString);

Verbinding maken met Microsoft Entra

Een backend-app die Microsoft Entra gebruikt, moet zich met succes authenticeren en een beveiligingstokenreferentie verkrijgen voordat het verbinding maakt met de IoT Hub. Dit token wordt doorgegeven aan een IoT Hub verbindingsmethode. Voor algemene informatie over het instellen en gebruiken van Microsoft Entra voor IoT Hub, zie Toegang tot IoT Hub beheren met behulp van Microsoft Entra ID.

Voor een overzicht van de authenticatie van de Node.js SDK, zie:

Microsoft Entra-app configureren

U moet een Microsoft Entra-app instellen die is geconfigureerd voor uw voorkeurs authenticatiegegevens. De app bevat parameters zoals de clientgeheimen die door de backendtoepassing worden gebruikt voor authenticatie. Beschikbare verificatieconfiguraties voor apps zijn:

  • Klantgeheim
  • Certificaat
  • Geconsolideerde identiteit credential

Voor Microsoft Entra-apps zijn mogelijk specifieke rolmachtigingen vereist, afhankelijk van bewerkingen die worden uitgevoerd. Voorbeeld: IoT Hub Twin Contributor is vereist om lees- en schrijftoegang tot een IoT Hub-apparaat en module twins mogelijk te maken. Zie Toegang tot IoT Hub beheren met behulp van Azure RBAC-roltoewijzing voor meer informatie.

Voor meer informatie over het instellen van een Microsoft Entra-app, zie Quickstart: Een applicatie registreren bij het Microsoft-identiteitsplatform.

Authenticeren met DefaultAzureCredential

De gemakkelijkste manier om Microsoft Entra te gebruiken om een backend-applicatie te authentiseren, is door DefaultAzureCredential te gebruiken. Echter, het wordt aanbevolen om in een productieomgeving een andere methode te gebruiken, inclusief een specifieke TokenCredential of vereenvoudigde ChainedTokenCredential. Voor de eenvoud beschrijft dit gedeelte authenticatie met behulp van DefaultAzureCredential en Clientgeheim. Voor meer informatie over de voor- en nadelen van het gebruik van DefaultAzureCredential, raadpleeg Credential chains in de Azure Identity client library voor JavaScript.

DefaultAzureCredential ondersteunt verschillende verificatiemechanismen en bepaalt het juiste referentietype op basis van de omgeving waarin het wordt uitgevoerd. Het probeert meerdere typen referenties in een bepaalde volgorde te gebruiken totdat het een werkende referentie vindt.

Microsoft Entra vereist dit pakket:

npm install --save @azure/identity

In dit voorbeeld zijn de clientgeheim, client-ID en tenant-ID van de Microsoft Entra-appregistratie toegevoegd aan omgevingsvariabelen. Deze omgevingsvariabelen worden gebruikt om DefaultAzureCredential de toepassing te verifiëren. Het resultaat van een geslaagde Microsoft Entra-verificatie is een beveiligingstokenreferentie die wordt doorgegeven aan een IoT Hub-verbindingsmethode.

import { DefaultAzureCredential } from "@azure/identity";

// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();

Het resulterende authenticatietoken kan vervolgens worden doorgegeven aan fromTokenCredential om verbinding te maken met IoT Hub voor elke SDK-client die Microsoft Entra-referenties accepteert.

fromTokenCredential vereist twee parameters:

  • De URL van de Azure-service: de Azure-service-URL moet de indeling {Your Entra domain URL}.azure-devices.net hebben zonder voorvoegsel https:// . Bijvoorbeeld, MyAzureDomain.azure-devices.net.
  • De Azure-authenticatietoken

In dit voorbeeld wordt de Azure-referentie verkregen met behulp van DefaultAzureCredential. De URL en referentie van het Azure-domein worden vervolgens doorgegeven aan Registry.fromTokenCredential om de verbinding met IoT Hub te maken.

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);
Codevoorbeelden

Zie Voorbeelden van Azure-identiteiten voor werkvoorbeelden van Microsoft Entra-serviceverificatie.

Maak een callback-ontvanger voor bestanduploadmeldingen aan

Een callback-ontvanger voor het uploaden van een bestand maken:

  1. Roep getFileNotificationReceiver aan. Geef de naam op van een bestandsupload-callbackmethode die wordt aangeroepen wanneer er notificatieberichten worden ontvangen.
  2. Verwerk meldingen van bestanduploads in de callback-methode.

In dit voorbeeld wordt een ontvanger voor het terugbellen van meldingen receiveFileUploadNotification ingesteld. De ontvanger interpreteert de statusinformatie van het bestand en drukt een statusbericht af naar de console.

//Set up the receiveFileUploadNotification notification message callback receiver
serviceClient.getFileNotificationReceiver(function receiveFileUploadNotification(err, receiver){
if (err) {
  console.error('error getting the file notification receiver: ' + err.toString());
} else {
  receiver.on('message', function (msg) {
    console.log('File upload from device:')
    console.log(msg.getData().toString('utf-8'));
    receiver.complete(msg, function (err) {
      if (err) {
        console.error('Could not finish the upload: ' + err.message);
      } else {
        console.log('Upload complete');
      }
    });
  });
}

Voorbeeld van een melding voor het uploaden van een SDK-bestand

The SDK bevat een voorbeeld voor bestandsupload.