Megosztás a következőn keresztül:


Fájlok feltöltése egy eszközről a felhőbe az Azure IoT Hub segítségével

Ez a cikk bemutatja, hogyan kell:

  • Használja az IoT Hub fájlfeltöltési képességeit a fájl feltöltéséhez az Azure Blob Storage-ba, egy Azure IoT eszközt és szolgáltatás SDK-kat használva.
  • Értesítse az IoT Hubot arról, hogy a fájl sikeresen feltöltődött, és hozzon létre egy háttérszolgáltatást, amely fogadni tudja az IoT Hub fájlfeltöltési értesítéseit az Azure IoT szolgáltatás SDK-k használatával.

Bizonyos esetekben nem lehet egyszerűen leképezni az eszközök által küldött adatokat a IoT Hub által fogadott viszonylag kicsi, eszközről a felhőbe küldött üzenetekre. Az IoT Hub fájlfeltöltési képességei lehetővé teszik nagy vagy összetett adatok áthelyezését a felhőbe. Például:

  • Videók
  • Nagyméretű fájlok, amelyek képeket tartalmaznak
  • Rezgési adatminták nagy frekvencián történő mintavételezése
  • Az előfeldolgozott adatok valamilyen formája

Ezeket a fájlokat jellemzően kötegelt feldolgozásnak vetik alá a felhőben, olyan eszközök segítségével, mint az Azure Data Factory vagy a Hadoop stack. Amikor egy eszközről fájlokat kell feltölteni, továbbra is használhatja az IoT Hub biztonságát és megbízhatóságát. Ez a cikk megmutatja, hogyan.

Ez a cikk kiegészíti azokat a futtatható SDK-mintákat, amelyekre hivatkozik a cikkben.

További információkért lásd:

Előfeltételek

  • Egy IoT Hub. Néhány SDK-hívás igényli az IoT Hub elsődleges kapcsolati láncát, ezért jegyezze fel a kapcsolati láncot.

  • Regisztrált eszköz. Egyes SDK hívásokhoz szükség van az eszköz elsődleges kapcsolati stringjére, ezért jegyezze fel a kapcsolati stringet.

  • Az IoT Hub Service Connect engedély - Ahhoz, hogy fájlfeltöltési értesítési üzeneteket kapjon, a háttérszolgáltatásának szüksége van a Service Connect engedélyre. Alapértelmezés szerint minden IoT Hub egy megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja. További információért lásd: Connect to an IoT hub.

  • Az IoT-hubban állítsa be a fájlfeltöltést egy Azure Storage-fiók és egy Azure Blob Storage-tároló összekapcsolásával. Ezeket beállíthatja az Azure portál, az Azure CLI vagy az Azure PowerShell használatával.

Áttekintés

Ez az útmutató két részből áll:

  • Feltölt egy fájlt egy eszköz alkalmazásból
  • Fájlfeltöltési értesítés fogadása háttéralkalmazásban

Feltölt egy fájlt egy eszköz alkalmazásból

Ez a rész bemutatja, hogyan lehet egy fájlt feltölteni egy eszközről egy IoT hubra a DeviceClient osztály használatával az Azure IoT SDK for .NET keretében.

Az alábbi eljárással tölthet fel egy fájlt egy eszközről az IoT Hubra:

  1. Csatlakozás az IoT Hubhoz
  2. SAS URI lekérése IoT Hubról
  3. Töltse fel a fájlt az Azure tárhelyre
  4. Értesítés az IoT Hubnak a fájlfeltöltés állapotáról

Eszköz csatlakoztatása az IoT Hubhoz

Egy eszközalkalmazás a következő módszerekkel tudja hitelesíteni magát az IoT Hub segítségével:

  • X.509-tanúsítvány
  • Megosztott hozzáférési kulcs

Hitelesítés X.509 tanúsítvány használatával

Egy eszköz IoT Hubhoz való csatlakoztatása X.509 tanúsítvány használatával:

  1. Használja a DeviceAuthenticationWithX509Certificate objektumot, hogy létrehozzon egy olyan objektumot, amely tartalmazza az eszköz- és tanúsítványinformációkat. A DeviceAuthenticationWithX509Certificate második paraméterként kerül átadásra a DeviceClient.Create (2. lépés).

  2. Használja a DeviceClient.Create funkciót, hogy X.509 tanúsítvány használatával csatlakoztassa az eszközt az IoT Hubhoz.

Ebben a példában az eszköz és a tanúsítvány adatai a authDeviceAuthenticationWithX509Certificate objektumba kerülnek beírásra, amelyet átadnak a DeviceClient.Create-nek.

Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Egy éles rendszerben tárolja az érzékeny bemeneti paramétereket környezeti változókban vagy más, biztonságosabb tárolási helyen. Például használja a Environment.GetEnvironmentVariable("HOSTNAME")-t a gazdagépnév környezeti változójának olvasásához.

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

További információ a tanúsítványhitelesítésről:

Kódaminták

A készülék X.509 tanúsítvány hitelesítésének működő példáiért lásd:

Hitelesítsen megosztott hozzáférési kulcs használatával

Hívja meg a CreateFromConnectionString függvényt, hogy csatlakozzon az eszközhöz. Adja meg az eszköz elsődleges kapcsolati karakterláncát.

A AMQP az alapértelmezett szállítási protokoll.

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

SAS URI lekérése IoT Hubról

Hívja meg a GetFileUploadSasUriAsync függvényt, hogy megkapja a fájlfeltöltési részleteket. A SAS URI-t a következő lépésben használják egy fájl eszközről a Blob tárhelyre történő feltöltésére.

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

Töltsön fel egy fájlt az Azure tárolóba

Fájl feltöltése az Azure tárolóra:

  1. Hozzon létre egy blockBlobClient objektumot, megadva egy fájlfeltöltési URI-t.

  2. Használd az UploadAsync metódust egy fájl feltöltéséhez a Blob Storage-ba, a SAS URI átadásával. Opcionálisan hozzáadhat Blob feltöltési opciókat és törlési token paramétereket.

Az Azure Blob kliens mindig a HTTPS protokollt használja a fájl feltöltéséhez az Azure Storage-ba.

Ebben a példában a BlockBlobClient részére átadják a SAS URI-t, hogy létrehozzon egy Azure Storage blokk Blob klienst, és feltöltse a fájlt.

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

Értesítés az IoT Hubnak a fájlfeltöltés állapotáról

Használja a CompleteFileUploadAsync metódust, hogy értesítse az IoT hub-ot, hogy az eszköz kliens befejezte a feltöltést, és adja át a FileUploadCompletionNotification objektumot. A IsSuccess jelző azt mutatja, hogy a feltöltés sikeres volt-e vagy sem. Az értesítés után az IoT hub felszabadítja a feltöltéshez kapcsolódó erőforrásokat (a SAS URI).

Ha a fájlfeltöltési értesítések engedélyezve vannak, az IoT hub fájlfeltöltési értesítési üzenetet küld a fájlfeltöltési értesítésekre konfigurált háttérszolgáltatásoknak.

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

SDK fájl feltöltési minta

Az SDK tartalmazza ezt a fájl feltöltési példát.

Fogadjon fájlfeltöltési értesítést a háttéralkalmazásban.

Létrehozhat egy háttérszolgáltatást, amely a fájlfeltöltési értesítési üzeneteket fogadja az IoT hubtól.

A ServiceClient osztály olyan metódusokat tartalmaz, amelyeket a szolgáltatások használhatnak fájlfeltöltési értesítések fogadására.

Szolgáltatás hozzáadása NuGet Package

A háttér-szolgáltatási alkalmazásokhoz szükség van a Microsoft.Azure.Devices NuGet csomagra.

Csatlakozás az IoT Hubhoz

Kapcsolhat egy háttérszolgáltatást az IoT Hubhoz az alábbi módszerekkel:

  • Megosztott hozzáférési szabályzat
  • Microsoft Entra

Fontos

Ez a cikk lépéseket tartalmaz a szolgáltatáshoz való csatlakozáshoz megosztott hozzáférési aláírás használatával. Ez az hitelesítési módszer kényelmes a teszteléshez és értékeléshez, de a szolgáltatáshoz való hitelesítés Microsoft Entra ID-val vagy kezelt identitásokkal biztonságosabb megközelítés. További információkért tekintse meg a felhőalapú biztonság > IoT-megoldások biztonsági legjobb gyakorlatait.

Kapcsolódjon megosztott hozzáférési szabályzattal

Csatlakoztasson egy szerveralkalmazást egy eszközhöz a CreateFromConnectionString használatával. Az alkalmazásának service connect engedélyre van szüksége. Adja meg ezt a megosztott hozzáférési házirend-kapcsolati karakterláncot paraméterként a fromConnectionString-hez. További információért a megosztott hozzáférési irányelvekről lásd: Az IoT Hub hozzáférésének vezérlése megosztott hozzáférési aláírásokkal.

Például:

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

Csatlakozzon a Microsoft Entra használatával

Egy Microsoft Entra-t használó backend alkalmazásnak sikeresen kell hitelesítenie magát, és megszereznie egy biztonsági token hitelesítő adatot, mielőtt csatlakozna az IoT Hubhoz. Ez a token egy IoT Hub kapcsolatfelvételi módszerhez kerül továbbításra. Az IoT Hub beállításával és használatával kapcsolatos általános információkért lásd: Az IoT Hub hozzáférésének szabályozása Microsoft Entra ID használatával.

Microsoft Entra alkalmazás konfigurálása

Be kell állítania egy Microsoft Entra alkalmazást, amely az Ön által preferált hitelesítési hitelesítő adat szerint van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazás-hitelesítési konfigurációk a következők:

  • Kliens titok
  • Bizonyítvány
  • Federatív identitáshitelesítő adat

A Microsoft Entra alkalmazások működése során szükség lehet speciális szerepkör jogosultságokra. Az IoT Hub ikermodul közreműködői például szükségesek az IoT Hub-eszközök és modulikrek olvasási és írási hozzáférésének engedélyezéséhez. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.

A Microsoft Entra-alkalmazások beállításáról további információkat a Gyorsútmutató: Alkalmazás regisztrálása a Microsoft identitásplatformon című dokumentumban talál.

Hitelesítse a DefaultAzureCredential használatával

A Microsoft Entra használatának legegyszerűbb módja egy háttéralkalmazás hitelesítésére a DefaultAzureCredential használata, de ajánlott egy másik módszert használni éles környezetben, beleértve egy adott TokenCredential vagy egyszerűsített ChainedTokenCredential metódust is. Az egyszerűség kedvéért ez a szakasz bemutatja az DefaultAzureCredential és az Ügyfél titok használatával történő hitelesítést. További információért a DefaultAzureCredential használatának előnyeiről és hátrányairól tekintse meg a DefaultAzureCredential használati útmutatóját.

DefaultAzureCredential támogatja a különböző hitelesítési mechanizmusokat, és meghatározza a megfelelő hitelesítőadat-típust az általa futtatott környezet alapján. Megpróbál több hitelesítési típust használni sorrendben, amíg nem talál működő hitelesítési adatokat.

A Microsoft Entra ezeket a NuGet csomagokat és a megfelelő using utasításokat igényli.

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

Ebben a példában a Microsoft Entra alkalmazás regisztráció ügyfél titkos kódja, ügyfélazonosítója és bérlőazonosítója hozzáadódik a környezeti változókhoz. Ezeket a környezeti változókat a DefaultAzureCredential használja az alkalmazás hitelesítésére. Egy sikeres Microsoft Entra hitelesítés eredménye egy biztonsági token hitelesítő adat, amelyet átadnak egy IoT Hub csatlakozási módszernek.

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

Az így kapott TokenCredential átadható egy IoT Hubhoz kapcsolódó metódusnak bármely SDK ügyfél esetében, amely elfogadja a Microsoft Entra hitelesítő adatokat.

Ebben a példában a TokenCredential átadódik a ServiceClient.Create-nak, hogy létrejöjjön egy ServiceClient kapcsolati objektum.

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

Ebben a példában a TokenCredential átadásra kerül a RegistryManager.Create számára, hogy létrehozzon egy RegistryManager objektumot.

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

A Microsoft Entra szolgáltatás hitelesítésének működő példájáért lásd: Szerepkör alapú hitelesítés minta.

Fájl feltöltési értesítés fogadása

A fájlfeltöltési értesítés fogadásához:

  1. Hozzon létre egy CancellationToken-t.
  2. Hívja meg a GetFileNotificationReceiver függvényt egy értesítési vevő létrehozásához.
  3. Használjon egy ciklust a ReceiveAsync függvénnyel, hogy megvárja a fájlfeltöltési értesítést.

Például:

// 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);
}

SDK fájlfeltöltés-vétel mintaprogram

Az SDK tartalmazza ezt a fájl feltöltési vevő mintát.

Áttekintés

Ez az útmutató két részből áll:

  • Feltölt egy fájlt egy eszköz alkalmazásból
  • Fájlfeltöltési értesítés fogadása háttéralkalmazásban

Feltölt egy fájlt egy eszköz alkalmazásból

Ez a szakasz leírja, hogyan tölthetünk fel egy fájlt egy eszközről egy IoT hubra az Azure IoT SDK for Java DeviceClient osztályának használatával.

Az alábbi eljárással tölthet fel egy fájlt egy eszközről az IoT Hubra:

  1. Csatlakoztassa az eszközt az IoT Hubhoz
  2. SAS URI lekérése IoT Hubról
  3. Töltsd fel a fájlt az Azure Storage-ba.
  4. Küldje el a fájlfeltöltési állapot értesítését az IoT hubba.

Eszköz csatlakoztatása az IoT Hubhoz

Egy eszközalkalmazás a következő módszerekkel tudja hitelesíteni magát az IoT Hub segítségével:

  • X.509-tanúsítvány
  • Megosztott hozzáférési kulcs

Hitelesítés X.509 tanúsítvány használatával

Egy eszköz IoT Hubhoz való csatlakoztatása X.509 tanúsítvány használatával:

  1. Hozza létre az SSLContext objektumot a buildSSLContext használatával.
  2. Adja hozzá a SSLContext információt egy ClientOptions objektumhoz.
  3. Hívja meg a DeviceClient-et a ClientOptions információk használatával a készülék és az IoT Hub közötti kapcsolat létrehozásához.

Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Egy éles rendszerben tárolja az érzékeny bemeneti paramétereket környezeti változókban vagy más, biztonságosabb tárolási helyen. Például egy nyilvános kulcsú tanúsítványsztring környezeti változójának olvasására használható Environment.GetEnvironmentVariable("PUBLICKEY") .

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

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

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

További információ a tanúsítványhitelesítésről:

Kódaminták

A készülék X.509 tanúsítvány hitelesítésének működő példáiért lásd:

Hitelesítsen megosztott hozzáférési kulcs használatával

A fájlfeltöltési műveletek mindig a HTTPS-t használják, de a DeviceClient meghatározhatja az IotHubClientProtocol-t más szolgáltatásokhoz, mint például a telemetria, az eszköz módszer és az eszköz iker.

IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;

Inicializálja a DeviceClient-t, hogy csatlakozzon az eszközhöz az eszköz elsődleges kapcsolati karakterláncának használatával.

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

SAS URI lekérése IoT Hubról

Hívja meg a getFileUploadSasUri objektum beszerzéséhez FileUploadSasUriResponse parancsot.

FileUploadSasUriResponse tartalmazza ezeket a metódusokat és visszatérési értékeket. A visszatérési értékek átadhatók a fájlfeltöltési módszereknek.

Metódus Visszatérési érték
getCorrelationId() Korrelációs azonosító
getContainerName() Tároló név
getBlobName() Blob név
getBlobUri() Blob URI

Például:

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

Töltsd fel a fájlt az Azure Storage-ba.

Az URI-végpontot adja át a BlobClientBuilder.buildclient-nek, hogy létrehozza a BlobClient objektumot.

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

Hívja meg az uploadFromFile parancsot a fájl feltöltéséhez a Blob Storage.

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

Küldje el a fájlfeltöltési állapot értesítését az IoT hubba.

Küldjön feltöltési állapot értesítést az IoT hubnak egy fájl feltöltési kísérlet után.

Hozzon létre egy FileUploadCompletionNotification objektumot. Adja át a correlationId és a isSuccess fájlfeltöltés sikeres állapotát. Adjon meg egy isSuccesstrue értéket, ha a fájl feltöltése sikeres volt, false ha nem.

FileUploadCompletionNotification akkor is meg kell hívni, ha a fájl feltöltése sikertelen. Az IoT Hub rögzített számú SAS URI-val rendelkezik, amelyek bármikor aktívak lehetnek. Ha végzett a fájlfeltöltéssel, szabadítsa fel az SAS URI-t, hogy más SAS URI-k is létrehozhatók legyenek. Ha egy SAS URI-t nem szabadítanak fel ezen az API-n keresztül, akkor az végül magától szabadul fel annak alapján, hogy mennyi ideig vannak konfigurálva az SAS URI-k egy IoT hub-on.

Ez a példa sikeres állapotot ad át.

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

Zárja be az ügyfelet

Szabadítsd fel a client erőforrásokat.

client.closeNow();

Készítsen egy háttéralkalmazást.

Ez a szakasz bemutatja, hogyan lehet fájlfeltöltési értesítést kapni egy háttérrendszerben.

A ServiceClient osztály olyan metódusokat tartalmaz, amelyeket a szolgáltatások használhatnak fájlfeltöltési értesítések fogadására.

Adja hozzá az importálási utasításokat

Adja hozzá ezeket az import utasításokat az Azure IoT Java SDK és a kivételkezelő használatához.

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

Csatlakozás az IoT Hubhoz

Kapcsolhat egy háttérszolgáltatást az IoT Hubhoz az alábbi módszerekkel:

  • Megosztott hozzáférési szabályzat
  • Microsoft Entra

Fontos

Ez a cikk lépéseket tartalmaz a szolgáltatáshoz való csatlakozáshoz megosztott hozzáférési aláírás használatával. Ez az hitelesítési módszer kényelmes a teszteléshez és értékeléshez, de a szolgáltatáshoz való hitelesítés Microsoft Entra ID-val vagy kezelt identitásokkal biztonságosabb megközelítés. További információkért tekintse meg a felhőalapú biztonság > IoT-megoldások biztonsági legjobb gyakorlatait.

Kapcsolódjon megosztott hozzáférési szabályzattal

Határozza meg a kapcsolat protokollját

Használja a IotHubServiceClientProtocol-t az alkalmazási rétegbeli protokoll meghatározásához, amelyet a szolgáltató kliens használ az IoT Hubbal történő kommunikációhoz.

IotHubServiceClientProtocol csak a AMQPS vagy a AMQPS_WS felsorolást fogadja el.

private static final IotHubServiceClientProtocol protocol =    
    IotHubServiceClientProtocol.AMQPS;
A ServiceClient objektum létrehozása

Hozza létre a ServiceClient objektumot, megadva az IoT Hub kapcsolatát és protokollját.

Ha fájlt szeretne feltölteni egy eszközön a IoT Hub, a szolgáltatásnak szolgáltatáscsatlakozási engedélyre van szüksége. Alapértelmezés szerint minden IoT Hub egy megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.

Paraméterként az ServiceClient konstruktorhoz adja meg a szolgáltatási megosztott hozzáférési szabályzatot. További információért a megosztott hozzáférési irányelvekről lásd: Az IoT Hub hozzáférésének vezérlése megosztott hozzáférési aláírásokkal.

String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
private static final ServiceClient serviceClient (iotHubConnectionString, protocol);
Nyissa meg a kapcsolatot az alkalmazás és az IoT Hub között.

Nyissa meg az AMQP küldő kapcsolatát. Ez a módszer létrehozza a kapcsolatot az alkalmazás és az IoT Hub között.

serviceClient.open();

Csatlakozzon a Microsoft Entra használatával

Egy Microsoft Entra-t használó backend alkalmazásnak sikeresen kell hitelesítenie magát, és megszereznie egy biztonsági token hitelesítő adatot, mielőtt csatlakozna az IoT Hubhoz. Ez a token egy IoT Hub kapcsolatfelvételi módszerhez kerül továbbításra. Az IoT Hub beállításával és használatával kapcsolatos általános információkért lásd: Az IoT Hub hozzáférésének szabályozása Microsoft Entra ID használatával.

Az áttekintésért a Java SDK hitelesítéséről, lásd: Azure hitelesítés Java-val és Azure Identity-vel.

Az egyszerűség kedvéért ez a szakasz a kliens titok használatával történő hitelesítés leírására összpontosít.

Microsoft Entra alkalmazás konfigurálása

Be kell állítania egy Microsoft Entra alkalmazást, amely az Ön által preferált hitelesítési hitelesítő adat szerint van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazás-hitelesítési konfigurációk a következők:

  • Kliens titok
  • Bizonyítvány
  • Federatív identitáshitelesítő adat

A Microsoft Entra alkalmazások működése során szükség lehet speciális szerepkör jogosultságokra. Az IoT Hub ikermodul közreműködői például szükségesek az IoT Hub-eszközök és modulikrek olvasási és írási hozzáférésének engedélyezéséhez. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.

A Microsoft Entra-alkalmazások beállításáról további információkat a Gyorsútmutató: Alkalmazás regisztrálása a Microsoft identitásplatformon című dokumentumban talál.

Hitelesítse a DefaultAzureCredential használatával

A Microsoft Entra használatának legegyszerűbb módja egy háttéralkalmazás hitelesítésére a DefaultAzureCredential használata, de ajánlott egy másik módszert használni éles környezetben, beleértve egy adott TokenCredential vagy egyszerűsített ChainedTokenCredential metódust is. További információért a DefaultAzureCredential használatának előnyeiről és hátrányairól tekintse meg a Jogosultságláncok az Azure Identity kliens könyvtárban Java-hoz című dokumentációt.

A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a környezet alapján a megfelelő hitelesítési típust, amelyben végrehajtás alatt áll. Megpróbál több hitelesítési típust használni sorrendben, amíg nem talál működő hitelesítési adatokat.

A Microsoft Entra alkalmazás hitelesítő adatait a DefaultAzureCredentialBuilder használatával hitelesítheti. Mentse a csatlakozási paramétereket, mint például a kliens titkos kulcs, tenantID, clientID, és kliens titkos kulcs értékeket környezeti változóként. Miután a TokenCredential létrejött, adja át a ServiceClient-nek vagy más építőnek 'credential' paraméterként.

Ebben a példában a DefaultAzureCredentialBuilder megkísérli hitelesíteni egy kapcsolatot a DefaultAzureCredential-ben leírt listából. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági token hitelesítő adat, amelyet átadnak egy konstruktornak, például a ServiceClient számára.

TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
Hitelesítés a ClientSecretCredentialBuilder használatával

A ClientSecretCredentialBuilder használatával létrehozhat egy hitelesítő adatot az ügyfél titkos adataival. Ha sikeres, ez a metódus egy TokenCredential értéket ad vissza, amely átadható a ServiceClientnek vagy más szerkesztőnek hitelesítőadat-paraméterként.

Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfél titkos kódját, ügyfél-azonosítóját és bérlőazonosító-értékeit hozzáadtuk a környezeti változókhoz. Ezeket a környezeti változókat a ClientSecretCredentialBuilder használja a hitelesítő adatok felépítéséhez.

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();
Egyéb hitelesítési osztályok

A Java SDK tartalmazza azokat az osztályokat is, amelyek hitelesítik a háttéralkalmazást a Microsoft Entra-val.

Kódaminták

A Microsoft Entra szolgáltatás hitelesítésének működő mintáiért lásd: Szerepkör alapú hitelesítés példa.

Ellenőrizze a fájlfeltöltés állapotát

A fájl feltöltési állapotának ellenőrzéséhez:

  1. Hozzon létre egy getFileUploadNotificationReceiver objektumot.
  2. Használja a megnyitás opciót az IoT hubhoz való csatlakozáshoz.
  3. Hívja a fogadás függvényt, hogy ellenőrizze a fájlfeltöltés állapotát. Ez a metódus egy fileUploadNotification objektumot ad vissza. Ha egy feltöltési értesítést kap, megtekintheti a feltöltési státusz mezőket a fileUploadNotification módszerek használatával.

Például:

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 fájl feltöltési minták

Két Java fájlfeltöltési minta található.

Csomagok telepítése

A kapcsolódó kód meghívása előtt telepíteni kell az azure-iot-device kódtárat.

pip install azure-iot-device

A azure.storage.blob csomagot a fájlfeltöltés végrehajtására használják.

pip install azure.storage.blob

Fájl feltöltése egy eszközalkalmazásból

Ez a szakasz azt ismerteti, hogyan tölthetünk fel fájlt egy eszközről egy IoT csomópontra az Azure IoT SDK a Pythonhoz IoTHubDeviceClient osztályának segítségével.

Könyvtárak importálása

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

Eszköz csatlakoztatása az IoT Hubhoz

Egy eszközalkalmazás a következő módszerekkel tudja hitelesíteni magát az IoT Hub segítségével:

  • X.509-tanúsítvány
  • Megosztott hozzáférési kulcs

Hitelesítés X.509 tanúsítvány használatával

Egy eszköz IoT Hubhoz való csatlakoztatása X.509 tanúsítvány használatával:

  1. Használja a create_from_x509_certificate-et az X.509 tanúsítvány paramétereinek hozzáadására.
  2. Hívd meg a connect-et az eszköz kliens csatlakoztatásához.

Ez a példa a tanúsítvány bemeneti paraméterértékeit mutatja be helyi változóként az egyértelműség érdekében. Egy éles rendszerben tárolja az érzékeny bemeneti paramétereket környezeti változókban vagy más, biztonságosabb tárolási helyen. Például használja a os.getenv("HOSTNAME")-t a gazdagépnév környezeti változójának olvasásához.

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

További információ a tanúsítványhitelesítésről:

Kódaminták

A készülék X.509 tanúsítvány-hitelesítési mintáit a fájlnevek x509 végződésű példáiban találod meg az Async hub scenarios alatt.

Hitelesítsen megosztott hozzáférési kulcs használatával

Eszköz csatlakoztatása az IoT Hubhoz:

  1. Hívja meg a create_from_connection_string függvényt az eszköz elsődleges kapcsolatának karakterláncának hozzáadásához.
  2. Hívja meg a connect kapcsolatot a készülék ügyfélhez való csatlakozáshoz.

Például:

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

Blob Storage információinak lekérése

Hívja meg a get_storage_info_for_blob függvényt, hogy információkat kapjon egy IoT-hubról egy kapcsolt Azure Storage-fiókról. Ez az információ tartalmazza a hosztnevet, a tároló nevét, a blob nevét, és egy SAS tokent. A get_storage_info_for_blob metódus a metódusban használt correlation_id , notify_blob_upload_statusértéket is visszaadja. A correlation_id az IoT Hub módszere arra, hogy megjelölje, melyik Blobbal dolgozik éppen.

# 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)

Fájl feltöltése Blob Storage-ba

Egy fájl feltöltése Blob Storage-ba:

  1. Használja a from_blob_url metódust egy BlobClient objektum létrehozásához egy blob URL alapján.
  2. Hívja meg az upload_blob funkciót, hogy feltöltse a fájlt a Blob Storage tárhelybe.

Ez a példa elemzi a blob_info struktúrát, hogy létrehozzon egy URL-t, amelyet egy BlobClient inicializálásához használ fel. Ezután meghívja a upload_blob-t, hogy feltöltse a fájlt a Blob tárba.

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)

Értesítse az IoT hubot a feltöltési állapotról.

Használja a notify_blob_upload_status, hogy értesítse az IoT hubot a Blob Storage művelet állapotáról. Adja át a correlation_id, amelyet a get_storage_info_for_blob módszerrel kaptak. Az correlation_id-t az IoT Hub arra használja, hogy értesítse azokat a szolgáltatásokat, amelyek figyelik a fájlfeltöltési feladat állapotáról szóló értesítéseket.

Ez a példa értesíti az IoT központot a sikeres fájlfeltöltésről.

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

Zárja be az eszköz kliensét

Kapcsolja ki a klienst. Miután ezt a metódust meghívják, bármilyen további kísérlet az ügyfélhívásokra ClientError hibát eredményez.

device_client.shutdown()

SDK fájl feltöltési minták

Az SDK két fájlfeltöltési mintát tartalmaz:

Áttekintés

Ez a cikk bemutatja, hogyan használható az Azure IoT SDK for Node.js egy eszközalkalmazás létrehozásához, amely fájlt tölthet fel, valamint egy háttérszolgáltatás alkalmazás, amely értesítést kap a fájlfeltöltésről.

Eszközalkalmazás létrehozása

Ez a szakasz bemutatja, hogyan lehet egy fájlt feltölteni egy eszközről egy IoT központba az azure-iot-device csomag segítségével az Azure IoT SDK-ban Node.js-hez.

SDK-csomagok telepítése

A következő parancs futtatásával telepítheti a azure-iot-device eszköz SDK-t, az azure-iot-device-mqtt-t és a @azure/storage-blob csomagokat a fejlesztői gépére:

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

Az azure-iot-device csomag olyan objektumokat tartalmaz, amelyek IoT-eszközökhöz illesztenek.

Az alábbi eljárással tölthet fel egy fájlt egy eszközről az IoT Hubra:

  1. Csatlakoztassa az eszközt az IoT Hubhoz
  2. Szerezzen Blob megosztott hozzáférési aláírási (SAS) tokent az IoT Hubból
  3. Töltsd fel a fájlt az Azure Storage-ba.
  4. Küldje el a fájlfeltöltési állapot értesítését az IoT hubba.

Modulok létrehozása

Készítsen ügyfél, protokoll, hibák és útvonal modulokat a telepített csomagok használatával.

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

Eszköz csatlakoztatása az IoT Hubhoz

Egy eszközalkalmazás a következő módszerekkel tudja hitelesíteni magát az IoT Hub segítségével:

  • X.509-tanúsítvány
  • Megosztott hozzáférési kulcs

Hitelesítés X.509 tanúsítvány használatával

Az X.509 tanúsítvány csatolva van az eszköz és az IoT Hub közötti kapcsolat szállításához.

Az eszköz-IoT Hub kapcsolat X.509 tanúsítvány használatával történő konfigurálásához:

  1. Hívja meg a fromConnectionString függvényt az eszköz vagy az identitási modul kapcsolati karakterláncának és a szállítási típusnak a Client objektumhoz való hozzáadásához. Adja hozzá a x509=true elemet a kapcsolati karakterlánchoz, hogy jelezze, egy tanúsítvány hozzáadásra kerül a DeviceClientOptions elemhez. Például:

    • A eszköz kapcsolati lánc:

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

    • Egy azonossági modul kapcsolati karakterlánc:

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

  2. Konfiguráljon egy JSON változót a tanúsítvány adataival, és adja át a DeviceClientOptions objektumnak.

  3. A setOptions hívásával adjon hozzá egy X.509 tanúsítványt és kulcsot (és opcionálisan egy jelszót) a kliens szállításhoz.

  4. Hívja meg a open parancsot az eszköz és az IoT Hub közötti kapcsolat megnyitásához.

Ez a példa egy JSON-változó tanúsítványkonfigurációs adatait mutatja be. A tanúsítási konfiguráció clientOptions átkerül a setOptions-be, és a kapcsolat open használatával nyílik meg.

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

További információ a tanúsítványhitelesítésről:

Kódminta

A készülék X.509 tanúsítvány hitelesítésének működő mintáját lásd a Egyszerű minta eszköz X.509 alatt.

Hitelesítsen megosztott hozzáférési kulcs használatával

Válasszon egy szállítási protokollt

Az Client objektum a következő protokollokat támogatja:

  • Amqp
  • Http - A Http használata során a Client példány ritkán ellenőrzi az IoT Hub üzeneteit (minimum minden 25 percben).
  • Mqtt
  • MqttWs
  • AmqpWs

Telepítse a szükséges átviteli protokollokat a fejlesztői gépére.

Például ez a parancs telepíti a Amqp protokollt:

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

További információkért az MQTT, AMQP és HTTPS támogatás közötti különbségekről, lásd: Eszközre irányuló felhőkommunikációs útmutató és Válasszon kommunikációs protokollt.

Hozzon létre egy kliens objektumot

Hozzon létre egy Client objektumot a telepített csomag használatával.

Például:

const Client = require('azure-iot-device').Client;
Hozzon létre egy protokoll objektumot

Objektum létrehozása Protocol telepített átviteli csomag használatával.

Ez a példa az AMQP protokollt rendeli hozzá:

const Protocol = require('azure-iot-device-amqp').Amqp;
Adja hozzá az eszköz csatlakozási karakterláncát és a szállítási protokollt

Hívja a fromConnectionString metódust a készülék csatlakozási paramétereinek megadásához.

  • connStr – Az eszköz kapcsolati sztring.
  • transportCtor – A szállítási protokoll.

Ez a példa a Amqp szállítási protokollt használja:

const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Nyissa meg a kapcsolatot az IoT Hubbal

A open metódust használja a kapcsolat megnyitására egy IoT eszköz és az IoT Hub között.

Például:

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

SAS-jogkivonat lekérése IoT Hubról

Használja a getBlobSharedAccessSignature funkciót az összekapcsolt tárfiók SAS tokenének megszerzéséhez az IoT hub-tól.

Például:

// 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');
}

Töltse fel a fájlt az IoT hubra

Egy fájlt felöltése az eszközről az IoT hub-ra:

  1. Stream adatfolyam létrehozása
  2. Állítsd össze a blob URL-t
  3. BlockBlobClient létrehozása a Blob Storage-ba való fájlfeltöltéshez
  4. Hívja meg az uploadFile függvényt a fájl Blob Storage-ba való feltöltéséhez.
  5. Hívja meg a notifyBlobUploadStatus függvényt, hogy értesítse az IoT központot arról, hogy a feltöltés sikeres vagy sikertelen volt.

Például:

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

Töltse fel a helyi fájlt a blobtárhelyre.

Helyi fájlt tölthet fel a blob tárhelyre számítógépről.

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

SDK fájl feltöltési minta

Az SDK tartalmaz egy blob haladó feltöltés mintát.

Készítsen egy háttéralkalmazást.

Ez a szakasz leírja, hogyan lehet fájlfeltöltési értesítéseket fogadni egy háttéralkalmazásban.

A ServiceClient osztály olyan metódusokat tartalmaz, amelyeket a szolgáltatások használhatnak fájlfeltöltési értesítések fogadására.

Telepítse a szolgáltatás SDK csomagot

Futtassa ezt a parancsot az azure-iothub telepítéséhez a fejlesztői gépén:

npm install azure-iothub --save

Csatlakozás az IoT Hubhoz

Kapcsolhat egy háttérszolgáltatást az IoT Hubhoz az alábbi módszerekkel:

  • Megosztott hozzáférési szabályzat
  • Microsoft Entra

Fontos

Ez a cikk lépéseket tartalmaz a szolgáltatáshoz való csatlakozáshoz megosztott hozzáférési aláírás használatával. Ez az hitelesítési módszer kényelmes a teszteléshez és értékeléshez, de a szolgáltatáshoz való hitelesítés Microsoft Entra ID-val vagy kezelt identitásokkal biztonságosabb megközelítés. További információkért tekintse meg a felhőalapú biztonság > IoT-megoldások biztonsági legjobb gyakorlatait.

Kapcsolódjon megosztott hozzáférési szabályzattal

Használja a fromConnectionString funkciót az IoT hubhoz való csatlakozáshoz.

Egy fájl eszközről való feltöltéséhez a szolgáltatásnak szüksége van a service connect engedélyre. Alapértelmezés szerint minden IoT Hub egy megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.

Paraméterként a CreateFromConnectionString adja meg a szolgáltatás megosztott hozzáférési házirend kapcsolati karakterláncát. További információért a megosztott hozzáférési irányelvekről lásd: Az IoT Hub hozzáférésének vezérlése megosztott hozzáférési aláírásokkal.

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

Csatlakozzon a Microsoft Entra használatával

Egy Microsoft Entra-t használó backend alkalmazásnak sikeresen kell hitelesítenie magát, és megszereznie egy biztonsági token hitelesítő adatot, mielőtt csatlakozna az IoT Hubhoz. Ez a token egy IoT Hub kapcsolatfelvételi módszerhez kerül továbbításra. Az IoT Hub beállításával és használatával kapcsolatos általános információkért lásd: Az IoT Hub hozzáférésének szabályozása Microsoft Entra ID használatával.

A Node.js SDK-hitelesítés áttekintéséhez lásd:

Microsoft Entra alkalmazás konfigurálása

Be kell állítania egy Microsoft Entra alkalmazást, amely az Ön által preferált hitelesítési hitelesítő adat szerint van konfigurálva. Az alkalmazás olyan paramétereket tartalmaz, mint az ügyfélkulcs, amelyeket a háttéralkalmazás használ a hitelesítéshez. Az elérhető alkalmazás-hitelesítési konfigurációk a következők:

  • Kliens titok
  • Bizonyítvány
  • Federatív identitáshitelesítő adat

A Microsoft Entra alkalmazások működése során szükség lehet speciális szerepkör jogosultságokra. Az IoT Hub ikermodul közreműködői például szükségesek az IoT Hub-eszközök és modulikrek olvasási és írási hozzáférésének engedélyezéséhez. További információ: IoT Hub-hozzáférés kezelése Azure RBAC-szerepkör-hozzárendeléssel.

A Microsoft Entra-alkalmazások beállításáról további információkat a Gyorsútmutató: Alkalmazás regisztrálása a Microsoft identitásplatformon című dokumentumban talál.

Hitelesítse a DefaultAzureCredential használatával

A Microsoft Entra használatának legegyszerűbb módja egy háttéralkalmazás hitelesítésére a DefaultAzureCredential használata, de ajánlott egy másik módszert használni éles környezetben, beleértve egy adott TokenCredential vagy egyszerűsített ChainedTokenCredential metódust is. Az egyszerűség kedvéért ez a szakasz bemutatja az DefaultAzureCredential és az Ügyfél titok használatával történő hitelesítést. További információért a DefaultAzureCredential használatának előnyeiről és hátrányairól, lásd: Hitelkártyaláncok az Azure Identity JavaScript klienskönyvtárában

A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a környezet alapján a megfelelő hitelesítési típust, amelyben végrehajtás alatt áll. Megpróbál több hitelesítési típust használni sorrendben, amíg nem talál működő hitelesítési adatokat.

A Microsoft Entra ezt a csomagot igényli:

npm install --save @azure/identity

Ebben a példában a Microsoft Entra alkalmazás regisztráció kliens titka, kliensazonosítója és bérlőazonosítója hozzá lett adva a környezeti változókhoz. Ezeket a környezeti változókat a DefaultAzureCredential használja az alkalmazás hitelesítésére. Egy sikeres Microsoft Entra hitelesítés eredménye egy biztonsági token hitelesítő adat, amelyet átadnak egy IoT Hub csatlakozási módszernek.

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

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

Az így kapott hitelesítőjegyet ezután át lehet adni a fromTokenCredential metódusnak az IoT Hubhoz való csatlakozáshoz bármely SDK kliens számára, amely elfogadja a Microsoft Entra hitelesítő adatokat.

fromTokenCredential két paramétert igényel:

  • Az Azure szolgáltatás URL - Az Azure szolgáltatás URL-nek {Your Entra domain URL}.azure-devices.net formátumban kell lennie, https:// előtag nélkül. Például, MyAzureDomain.azure-devices.net.
  • Azure hitelesítő token

Ebben a példában az Azure hitelesítő adatokat a DefaultAzureCredential használatával szerezzük be. Az Azure domain URL és a hitelesítő adatokat ezután megadják a Registry.fromTokenCredential számára az IoT Hubhoz való kapcsolat létrehozásához.

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);
Kódaminták

A Microsoft Entra szolgáltatás hitelesítésének működő példáiért lásd az Azure identitás példáit.

Hozzon létre egy fájlfeltöltési értesítés visszahívási fogadót.

Fájlfeltöltési értesítési visszahívó fogadó létrehozása:

  1. Hívja meg a getFileNotificationReceiver-t. Adja meg egy fájlfeltöltési visszahívási metódus nevét, amelyet akkor hívnak meg, amikor értesítési üzeneteket kapnak.
  2. A fájl feltöltési értesítések feldolgozása a visszahívási metódusban.

Ez a példa beállít egy receiveFileUploadNotification értesítési visszahívási vevőt. A vevő értelmezi a fájlfeltöltési állapotinformációkat, és állapotüzenetet nyomtat a konzolra.

//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');
      }
    });
  });
}

SDK fájl feltöltési értesítés mintája

Az SDK tartalmaz egy fájl feltöltés mintát.