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


Fájlok feltöltése eszközről a felhőbe az Azure IoT Hub használatával

Ez a cikk bemutatja, hogyan:

  • Az IoT Hub fájlfeltöltési képességeivel feltölthet egy fájlt az Azure Blob Storage-ba egy Azure IoT-eszköz és szolgáltatás SDK használatával.
  • Értesítse az IoT Hubot, hogy a fájl sikeresen fel lett töltve, és hozzon létre egy háttérszolgáltatást a fájlfeltöltési értesítések fogadásához az IoT Hubtól az Azure IoT szolgáltatás SDK-jaival.

Bizonyos esetekben az eszközök által az IoT Hub által elfogadott, viszonylag kis méretű, eszközről felhőbe irányuló üzenetekbe küldött adatok nem képezhetők le könnyen. Az IoT Hub fájlfeltöltési képességei lehetővé teszik, hogy nagy vagy összetett adatokat helyezzen át a felhőbe. Példa:

  • Videók
  • Képeket tartalmazó nagyméretű fájlok
  • Nagy gyakorisággal mintavételezett rezgési adatok
  • Az előre feldolgozott adatok valamilyen formája

Ezeket a fájlokat általában a felhőben, olyan eszközökkel dolgozzák fel, mint az Azure Data Factory vagy a Hadoop-verem . Ha fájlokat kell feltöltenie egy eszközről, továbbra is használhatja az IoT Hub biztonságát és megbízhatóságát. Ez a cikk bemutatja, hogyan.

Ez a cikk az ebben a cikkben hivatkozott futtatható SDK-mintákat hivatott kiegészíteni.

További információk:

Fontos

Az X.509 hitelesítésszolgáltatói (CA) hitelesítést használó eszközökön a fájlfeltöltési funkció nyilvános előzetes verzióban érhető el, és engedélyezni kell az előnézeti módot. Általánosan elérhető x.509 ujjlenyomat-hitelesítést vagy X.509-tanúsítványigazolást használó eszközökön az Azure Device Provisioning Service-ben. Az IoT Hub x.509-hitelesítésével kapcsolatos további információkért lásd a támogatott X.509-tanúsítványokat.

Előfeltételek

  • Egy IoT Hub. Egyes SDK-hívásokhoz az IoT Hub elsődleges kapcsolati sztring szükséges, ezért jegyezze fel a kapcsolati sztring.

  • Regisztrált eszköz. Egyes SDK-hívásokhoz az eszköz elsődleges kapcsolati sztring szükséges, ezért jegyezze fel a kapcsolati sztring.

  • IoT Hub Service Connect-engedély – A fájlfeltöltési értesítési üzenetek fogadásához a háttérszolgáltatásnak Service Connect-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. További információ: Csatlakozás IoT Hubhoz.

  • Konfigurálja a fájlfeltöltést az IoT Hubon egy Azure Storage-fiók és egy Azure Blob Storage-tároló összekapcsolásával. Ezeket az Azure Portal, az Azure CLI vagy az Azure PowerShell használatával konfigurálhatja.

Áttekintés

Ez a útmutató két szakaszt tartalmaz:

  • Fájl feltöltése eszközalkalmazásból
  • Fájlfeltöltési értesítés fogadása háttéralkalmazásban

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

Ez a szakasz azt ismerteti, hogyan tölthet fel fájlokat egy eszközről egy IoT Hubra az Azure IoT SDK for .NET DeviceClient osztályával.

Ezt az eljárást követve feltölthet egy fájlt egy eszközről az IoT Hubra:

  1. Csatlakozás az IoT Hubhoz
  2. SAS URI lekérése az IoT Hubról
  3. A fájl feltöltése az Azure Storage-ba
  4. Az IoT Hub értesítése a fájlfeltöltés állapotáról

Eszköz csatlakoztatása az IoT Hubhoz

Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:

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

Hitelesítés X.509-tanúsítvánnyal

Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:

  1. A DeviceAuthenticationWithX509Certificate használatával olyan objektumot hozhat létre, amely eszköz- és tanúsítványinformációkat tartalmaz. DeviceAuthenticationWithX509Certificate második paraméterként lesz átadva DeviceClient.Create (2. lépés).

  2. A DeviceClient.Create használatával X.509-tanúsítvány használatával csatlakoztathatja az eszközt az IoT Hubhoz.

Ebben a példában az eszköz- és tanúsítványinformációk ki lesznek töltve a authDeviceAuthenticationWithX509Certificate továbbított DeviceClient.Createobjektumban.

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. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. Például a gazdagépnév környezeti változójának olvasására használható Environment.GetEnvironmentVariable("HOSTNAME") .

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

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

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

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

Kódminták

Az X.509-tanúsítványhitelesítés munkamintáiért lásd:

Hitelesítés megosztott hozzáférési kulccsal

Hívja meg a CreateFromConnectionStringet az eszközhöz való csatlakozáshoz. Adja át az eszköz elsődleges kapcsolati sztring.

AMQP az alapértelmezett átviteli protokoll.

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

SAS URI lekérése az IoT Hubról

Hívja meg a GetFileUploadSasUriAsync parancsot a fájlfeltöltés részleteinek lekéréséhez. Az SAS URI a következő lépésben egy eszközről a Blob Storage-ba való fájlfeltöltésre szolgál.

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

Fájl feltöltése az Azure Storage-ba

Fájl feltöltése az Azure Storage-ba:

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

  2. Az UploadAsync metódussal feltölthet egy fájlt a Blob Storage-ba, átadva az SAS URI-t. Blobfeltöltési beállításokat és lemondási jogkivonat-paramétereket is megadhat.

Az Azure Blob-ügyfél mindig HTTPS protokollt használ a fájl Azure Storage-ba való feltöltéséhez.

Ebben a példában BlockBlobClient a rendszer átadja az SAS URI-t egy Azure Storage blokkblobügyfél létrehozásához, és feltölti a fájlt:

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

Az IoT Hub értesítése a fájlfeltöltés állapotáról

A CompleteFileUploadAsync használatával értesítse az IoT Hubot arról, hogy az eszközügyfél befejezte a feltöltést, és átad egy FileUploadCompletionNotification objektumot. A IsSuccess jelölő jelzi, hogy a feltöltés sikeres volt-e. Az értesítés után az IoT Hub felszabadítja a feltöltéshez társított erőforrásokat (az SAS URI-t).

Ha a fájlfeltöltési értesítések engedélyezve vannak, az IoT Hub egy fájlfeltöltési értesítési üzenetet küld a fájlfeltöltési értesítéshez 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ájlfeltöltési minta

Az SDK tartalmazza ezt a fájlfeltöltési mintát.

Fájlfeltöltési értesítés fogadása háttéralkalmazásban

Létrehozhat egy háttérszolgáltatást a fájlfeltöltési értesítési üzenetek fogadásához az IoT Hubról.

A ServiceClient osztály olyan metódusokat tartalmaz, amelyekkel a szolgáltatások fájlfeltöltési értesítéseket fogadhatnak.

Szolgáltatás NuGet-csomag hozzáadása

A háttérszolgáltatás-alkalmazásokhoz a Microsoft.Azure.Devices NuGet-csomag szükséges.

Csatlakozás az IoT Hubhoz

Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:

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

Fontos

Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.

Csatlakozás megosztott hozzáférési szabályzattal

Háttéralkalmazás csatlakoztatása egy eszközhöz a CreateFromConnectionString használatával. Az alkalmazásnak szolgáltatáscsatlakoztatási engedélyre van szüksége. Adja meg ezt a megosztott hozzáférési szabályzatot, kapcsolati sztring paraméterként.fromConnectionString A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.

Példa:

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

Csatlakozás a Microsoft Entra használatával

A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.

A Microsoft Entra alkalmazás konfigurálása

Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz 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áshitelesítési konfigurációk a következők:

  • Titkos ügyfélkód
  • Tanúsítvány
  • Összevont identitás hitelesítő adatai

A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. 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ót a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.

Hitelesítés DefaultAzureCredential használatával

A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential vagy pared-down ChainedTokenCredentialmetódust is. Az egyszerűség kedvéért ez a szakasz a hitelesítést és az ügyfél titkos kódjának használatát DefaultAzureCredential ismerteti. A használat DefaultAzureCredentialelőnyeiről és hátrányairól további információt a DefaultAzureCredential használati útmutatója tartalmaz.

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. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.

A Microsoft Entra megköveteli ezeket a NuGet-csomagokat és a hozzájuk tartozó using utasításokat:

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

Ebben a példában a Microsoft Entra alkalmazásregisztrációs ügyfélkulcsa, ügyfél-azonosítója és bérlőazonosítója hozzáadódik a környezeti változókhoz. Ezek a környezeti változók az DefaultAzureCredential alkalmazás hitelesítésére szolgálnak. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet egy IoT Hub-kapcsolati módszernek ad át.

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 eredményül kapott TokenCredential ezután átadható egy IoT Hub-metódushoz való csatlakozásnak minden olyan SDK-ügyfél esetében, amely elfogadja a Microsoft Entra hitelesítő adatait:

Ebben a példában a TokenCredential serviceClient kapcsolati objektum létrehozásához szükséges átadás ServiceClient.Create történik.

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

Ebben a példában a rendszer átadja a TokenCredential RegistryManager objektum létrehozásához.RegistryManager.Create

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

A Microsoft Entra szolgáltatáshitelesítés működő mintájáért tekintse meg a szerepköralapú hitelesítési mintát.

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

Fájlfeltöltési értesítés fogadása:

  1. Hozzon létre egy CancellationTokent.
  2. Hívja meg a GetFileNotificationReceivert egy értesítési fogadó létrehozásához.
  3. Használjon egy hurkot a ReceiveAsync használatával, hogy megvárja a fájlfeltöltési értesítést.

Példa:

// 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ési fogadó mintája

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

Áttekintés

Ez a útmutató két szakaszt tartalmaz:

  • Fájl feltöltése eszközalkalmazásból
  • Fájlfeltöltési értesítés fogadása háttéralkalmazásban

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

Ez a szakasz azt ismerteti, hogyan tölthet fel egy fájlt egy eszközről egy IoT Hubra a Java Azure IoT SDK DeviceClient osztályával.

Ezt az eljárást követve feltölthet egy fájlt egy eszközről az IoT Hubra:

  1. Az eszköz csatlakoztatása az IoT Hubhoz
  2. SAS URI lekérése az IoT Hubról
  3. A fájl feltöltése az Azure Storage-ba
  4. Fájlfeltöltés állapotáról szóló értesítés küldése az IoT Hubnak

Eszköz csatlakoztatása az IoT Hubhoz

Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:

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

Hitelesítés X.509-tanúsítvánnyal

Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:

  1. Hozza létre az SSLContext objektumot a buildSSLContext használatával.
  2. Adja hozzá az SSLContext adatokat egy ClientOptions-objektumhoz .
  3. Hívja meg a DeviceClientet az ClientOptions információk használatával az eszköz–IoT Hub 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. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. 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ódminták

Az X.509-tanúsítványhitelesítés munkamintáiért lásd:

Hitelesítés megosztott hozzáférési kulccsal

A fájlfeltöltési műveletek mindig HTTPS-t használnak, de a DeviceClient meghatározhatja az IotHubClientProtocolt más szolgáltatásokhoz, például a telemetriához, az eszköz metódusához és az ikereszközhöz.

IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;

Példányosíthatja az DeviceClient eszközhöz való csatlakozáshoz az elsődleges kapcsolati sztring használatával.

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

SAS URI lekérése az IoT Hubról

A getFileUploadSasUri meghívása FileUploadSasUriResponse objektum beszerzéséhez.

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

Metódus Visszaadott érték
getCorrelationId() Korrelációs azonosító
getContainerName() Tárolónév
getBlobName() A blob neve
getBlobUri() Blob URI

Példa:

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

A fájl feltöltése az Azure Storage-ba

Adja át a blob URI-végpontját a BlobClientBuilder.buildclientnek a BlobClient objektum létrehozásához.

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

Az uploadFromFile meghívásával töltse fel a fájlt a Blob Storage-ba.

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

Fájlfeltöltés állapotáról szóló értesítés küldése az IoT Hubnak

Fájlfeltöltési kísérlet után küldjön egy feltöltési állapotértesítést az IoT Hubnak.

Hozzon létre egy FileUploadCompletionNotification objektumot. Adja meg a correlationIdisSuccess sikeres fájlfeltöltési állapotot. Adjon meg egy isSuccesstrue értéket, amikor a fájlfeltöltés sikeres volt, false ha nem.

FileUploadCompletionNotification akkor is meghívni kell, ha a fájlfeltöltés sikertelen. Az IoT Hub rögzített számú SAS URI-val rendelkezik, amely bármikor aktív lehet. Miután végzett a fájlfeltöltéssel, szabadítsd fel az SAS URI-t, hogy más SAS URI-k is létre tudjanak hozni. Ha egy SAS URI-t nem szabadít fel ezen az API-n keresztül, akkor végül felszabadítja magát attól függően, hogy a SAS URI-k mennyi ideig vannak konfigurálva az IoT Hubon való élethez.

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

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

Az ügyfél bezárása

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

client.closeNow();

Háttéralkalmazás létrehozása

Ez a szakasz azt ismerteti, hogyan kaphat fájlfeltöltési értesítést egy háttéralkalmazásban.

A ServiceClient osztály olyan metódusokat tartalmaz, amelyekkel a szolgáltatások fájlfeltöltési értesítéseket fogadhatnak.

Importálási utasítások hozzáadása

Adja hozzá ezeket az importálási 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

Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:

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

Fontos

Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.

Csatlakozás megosztott hozzáférési szabályzattal

A kapcsolati protokoll definiálása

Az IotHubServiceClientProtocol használatával definiálhatja a szolgáltatásügyfél által az IoT Hubbal való kommunikációhoz használt alkalmazásréteg protokollt.

IotHubServiceClientProtocol csak az enumerálást AMQPSAMQPS_WS fogadja el.

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

Hozza létre a ServiceClient objektumot, amely biztosítja az Iot Hub kapcsolati sztring és a protokollt.

Ha egy eszközön szeretne fájlt feltölteni az IoT Hubra, a szolgáltatásnak szüksége van a szolgáltatás csatlakoztatási engedélyére. 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.

A konstruktor paramétereként ServiceClient adja meg a szolgáltatás megosztott hozzáférési szabályzatát. A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.

String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
private static final ServiceClient serviceClient (iotHubConnectionString, protocol);
Az alkalmazás és az IoT Hub közötti kapcsolat megnyitása

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

serviceClient.open();

Csatlakozás a Microsoft Entra használatával

A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.

A Java SDK-hitelesítés áttekintéséhez tekintse meg a Java és az Azure Identity használatával történő Azure-hitelesítést.

Az egyszerűség kedvéért ez a szakasz az ügyféltitkos hitelesítés leírására összpontosít.

A Microsoft Entra alkalmazás konfigurálása

Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz 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áshitelesítési konfigurációk a következők:

  • Titkos ügyfélkód
  • Tanúsítvány
  • Összevont identitás hitelesítő adatai

A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. 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ót a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.

Hitelesítés DefaultAzureCredential használatával

A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential vagy pared-down ChainedTokenCredentialmetódust is. A használat DefaultAzureCredentialelőnyeiről és hátrányairól további információt a Java Azure Identity ügyfélkódtárában található Hitelesítőadat-láncok című témakörben talál.

A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a megfelelő hitelesítőadat-típust a környezet alapján, amelyben végrehajtja. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.

A Microsoft Entra alkalmazás hitelesítő adatait a DefaultAzureCredentialBuilder használatával hitelesítheti. Mentse a kapcsolati paramétereket, például az ügyfél titkos bérlőazonosítóját, az ügyfélazonosítót és az ügyfél titkos kódértékeit környezeti változóként. A létrehozás után adja át a TokenCredential ServiceClientnek vagy más szerkesztőnek hitelesítőadat-paraméterként.

Ebben a példában DefaultAzureCredentialBuilder megpróbál hitelesíteni egy kapcsolatot a DefaultAzureCredential szakaszban leírt listából. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet a rendszer átad egy konstruktornak, például a ServiceClientnek.

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 hitelesítő adatok létrehozásához használják ClientSecretCredentialBuilder .

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 az alábbi osztályokat is tartalmazza, amelyek egy háttéralkalmazást hitelesítenek a Microsoft Entra használatával:

Kódminták

A Microsoft Entra szolgáltatáshitelesítés működő mintáiért lásd a szerepköralapú hitelesítési mintát.

Fájlfeltöltés állapotának ellenőrzése

A fájlfeltöltés állapotának ellenőrzése:

  1. Hozzon létre egy getFileUploadNotificationReceiver objektumot.
  2. Az Open használatával csatlakozhat az IoT Hubhoz.
  3. Hívás fogadása a fájlfeltöltés állapotának ellenőrzéséhez. Ez a metódus egy fileUploadNotification objektumot ad vissza. Ha feltöltési értesítés érkezik, megtekintheti a feltöltési állapotmezőket a fileUploadNotification metódusokkal.

Példa:

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ájlfeltöltési minták

Két Java-fájlfeltöltési minta van.

Csomagok telepítése

Az azure-iot-device kódtárat telepíteni kell, mielőtt bármilyen kapcsolódó kódot meghívna.

pip install azure-iot-device

A rendszer az azure.storage.blob csomagot használja a fájlfeltöltés végrehajtásához.

pip install azure.storage.blob

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

Ez a szakasz azt ismerteti, hogyan tölthet fel fájlokat egy eszközről egy IoT Hubra az Azure IoT SDK for Python IoT SDK IoTHubDeviceClient osztályával.

Kódtá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

Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:

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

Hitelesítés X.509-tanúsítvánnyal

Eszköz csatlakoztatása az IoT Hubhoz X.509-tanúsítvány használatával:

  1. Az X.509-tanúsítványparaméterek hozzáadása a create_from_x509_certificate használatával
  2. Csatlakozás hívása az eszközügyfél 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. Éles rendszerben a bizalmas bemeneti paramétereket környezeti változókban vagy más biztonságosabb tárolási helyen tárolhatja. Például a gazdagépnév környezeti változójának olvasására használható os.getenv("HOSTNAME") .

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

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

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

x509 = X509(
    cert_file,
    key_file,
    pass_phrase,
)

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

# Connect to IoT Hub
await device_client.connect()

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

Kódminták

Az X.509-tanúsítványhitelesítés működő mintáit az Async Hub-forgatókönyvekben az x509-ben végződő fájlnevek példáiban tekinti meg.

Hitelesítés megosztott hozzáférési kulccsal

Eszköz csatlakoztatása az IoT Hubhoz:

  1. Hívja meg create_from_connection_string az eszköz elsődleges kapcsolati sztring hozzáadásához.
  2. Csatlakozás hívása az eszközügyfél csatlakoztatásához.

Példa:

# 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ók lekérése

Hívja meg a get_storage_info_for_blob , hogy információt kapjon egy IoT Hubról egy csatolt Azure Storage-fiókról. Ezek az információk tartalmazzák a gazdagép nevét, a tároló nevét, a blobnevet és egy SAS-jogkivonatot. A get_storage_info_for_blob metódus egy , a metódusban notify_blob_upload_status használt értéket is visszaadcorrelation_id. Az correlation_id IoT Hub így jelöli meg, hogy melyik Blobon dolgozik.

# 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 a Blob Storage-ba

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

  1. Blob URL-címből from_blob_url hozhat létre BlobClient-objektumot.
  2. Hívja meg upload_blob , hogy töltse fel a fájlt a Blob Storage-ba.

Ez a példa egy BlobClient inicializálásához használt URL-cím létrehozásához elemzi a blob_info struktúrát. Ezután meghívja upload_blob , hogy töltse fel a fájlt a Blob Storage-ba.

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)

Az IoT Hub értesítése a feltöltés állapotáról

A notify_blob_upload_status használatával értesítheti az IoT Hubot a Blob Storage-művelet állapotáról. Adja át a correlation_id módszerrel kapott get_storage_info_for_blob eredményt. Az correlation_id IoT Hub arra használja, hogy értesítést küldjön minden olyan szolgáltatásnak, amely figyelheti a fájlfeltöltési feladat állapotáról szóló értesítést.

Ez a példa értesíti a sikeres fájlfeltöltés IoT Hubját:

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

Az eszközügyfél leállítása

Állítsa le az ügyfelet. A metódus meghívása után a további ügyfélhívások megkísérlése a ClientError indítását eredményezi.

device_client.shutdown()

SDK-fájlfeltöltési minták

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

Áttekintés

Ez a cikk azt ismerteti, hogyan használhatja az Azure IoT SDK-t Node.js eszközalkalmazás létrehozásához egy fájl feltöltéséhez, és hogyan kaphat fájlfeltöltési értesítést a háttérszolgáltatás-alkalmazásról.

Eszközalkalmazás létrehozása

Ez a szakasz azt ismerteti, hogyan tölthet fel fájlokat egy eszközről egy IoT Hubra az Azure IoT SDK azure-iot-device csomagjával Node.js.

SDK-csomagok telepítése

Futtassa ezt a parancsot az azure-iot-device SDK, az azure-iot-device-mqtt és a @azure/storage-blobcsomagok telepítéséhez a fejlesztői gépen:

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.

Ezt az eljárást követve feltölthet egy fájlt egy eszközről az IoT Hubra:

  1. Az eszköz csatlakoztatása az IoT Hubhoz
  2. Blob megosztott hozzáférésű jogosultságkód (SAS) jogkivonat lekérése az IoT Hubról
  3. A fájl feltöltése az Azure Storage-ba
  4. Fájlfeltöltés állapotáról szóló értesítés küldése az IoT Hubnak

Modulok létrehozása

Hozzon létre ügyfél-, protokoll-, hiba- és elérésiút-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

Az eszközalkalmazások az alábbi módszerekkel végezhetnek hitelesítést az IoT Hubon:

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

Hitelesítés X.509-tanúsítvánnyal

Az X.509-tanúsítvány az eszköz–IoT Hub kapcsolatátvitelhez van csatolva.

Eszköz–IoT Hub kapcsolat konfigurálása X.509-tanúsítvány használatával:

  1. AConnectionString hívásával adja hozzá az eszköz- vagy identitásmodul kapcsolati sztring, és adja hozzá az Client objektum átviteli típusát. Adja hozzá x509=true a kapcsolati sztring, hogy jelezze, hogy a rendszer tanúsítványt ad hozzáDeviceClientOptions. Példa:

    • Eszköz kapcsolati sztring:

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

    • Identitásmodul kapcsolati sztring:

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

  2. Konfiguráljon egy JSON-változót tanúsítványadatokkal, és adja át a DeviceClientOptionsnak.

  3. Hívja meg a setOptionst , hogy adjon hozzá egy X.509-tanúsítványt és kulcsot (és opcionálisan jelszót) az ügyfélátvitelhez.

  4. Nyissa meg a hívást 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 rendszer átadja a tanúsítványkonfigurációt clientOptionssetOptions, és a kapcsolat a következő használatával opennyí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

Az X.509-tanúsítványhitelesítés működő mintájáért tekintse meg az X.509 egyszerű mintaeszközt.

Hitelesítés megosztott hozzáférési kulccsal

Átviteli protokoll kiválasztása

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

  • Amqp
  • Http - Használat Httpesetén a példány ritkán (legalább 25 percenként) ellenőrzi az Client IoT Hubtól érkező üzeneteket.
  • Mqtt
  • MqttWs
  • AmqpWs

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

Ez a parancs például telepíti a protokollt Amqp :

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

Az MQTT, az AMQP és a HTTPS-támogatás közötti különbségekről további információt a felhőalapú kommunikációs útmutatóban és a Kommunikációs protokoll kiválasztása című témakörben talál.

Ügyfélobjektum létrehozása

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

Példa:

const Client = require('azure-iot-device').Client;
Protokollobjektum létrehozása

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;
Az eszköz kapcsolati sztring és átviteli protokolljának hozzáadása

Hívás aConnectionStringtől az eszközkapcsolati paraméterek megadásához:

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

Ez a példa az átviteli protokollt Amqp használja:

const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Az IoT Hubhoz való kapcsolat megnyitása

Az IoT-eszköz és az IoT Hub közötti kapcsolat megnyitásához használja a nyitott metódust.

Példa:

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

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

A getBlobSharedAccessSignature használatával kérje le a társított tárfiók SAS-jogkivonatát az IoT Hubról.

Példa:

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

A fájl feltöltése az IoT Hubra

Fájl feltöltése eszközről az IoT Hubra:

  1. Streamfolyamat létrehozása
  2. A blob URL-címének létrehozása
  3. BlockBlobClient létrehozása a Blob Storage-ba való fájlfeltöltéshez
  4. Az uploadFile meghívása a fájl Blob Storage-ba való feltöltéséhez
  5. Hívja meg a notifyBlobUploadStatus parancsot, hogy értesítse az IoT Hubot arról, hogy a feltöltés sikeres vagy sikertelen volt

Példa:

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

A helyi fájl feltöltése blobtárolóba

Helyi fájlt feltölthet a blobtárolóba egy 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ájlfeltöltési minta

Az SDK tartalmaz egy feltöltést a blob speciális mintájára.

Háttéralkalmazás létrehozása

Ez a szakasz azt ismerteti, hogyan fogadhat fájlfeltöltési értesítéseket egy háttéralkalmazásban.

A ServiceClient osztály olyan metódusokat tartalmaz, amelyekkel a szolgáltatások fájlfeltöltési értesítéseket fogadhatnak.

Szolgáltatás SDK-csomag telepítése

Futtassa ezt a parancsot az Azure-iotHub fejlesztői gépen való telepítéséhez:

npm install azure-iothub --save

Csatlakozás az IoT Hubhoz

Háttérszolgáltatást az alábbi módszerekkel csatlakoztathat az IoT Hubhoz:

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

Fontos

Ez a cikk a szolgáltatáshoz való csatlakozás lépéseit tartalmazza közös hozzáférésű jogosultságkód használatával. Ez a hitelesítési módszer a teszteléshez és a kiértékeléshez kényelmes, de biztonságosabb módszer a Microsoft Entra-azonosítóval vagy felügyelt identitásokkal történő hitelesítés egy szolgáltatáshoz. További információkért tekintse meg a felhőbiztonság ajánlott biztonsági eljárásait>.

Csatlakozás megosztott hozzáférési szabályzattal

A fromConnectionString használatával csatlakozhat az IoT Hubhoz.

Ha egy fájlt szeretne feltölteni egy eszközről, a szolgáltatásnak a szolgáltatás csatlakoztatási engedélyére 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 CreateFromConnectionStringadja meg a szolgáltatás megosztott hozzáférési szabályzatát kapcsolati sztring. A megosztott hozzáférési szabályzatokról további információt az IoT Hub hozzáférésének szabályozása közös hozzáférésű jogosultságkódokkal című témakörben talál.

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

Csatlakozás a Microsoft Entra használatával

A Microsoft Entrát használó háttéralkalmazásnak sikeresen hitelesítenie kell és be kell szereznie egy biztonsági jogkivonat hitelesítő adatait, mielőtt csatlakozik az IoT Hubhoz. Ez a jogkivonat egy IoT Hub-kapcsolati metódusnak lesz átadva. A Microsoft Entra for IoT Hub beállításával és használatával kapcsolatos általános információkért tekintse meg az IoT Hubhoz való hozzáférés Szabályozása a Microsoft Entra ID használatával című témakört.

Az SDK-hitelesítés Node.js áttekintése:

A Microsoft Entra alkalmazás konfigurálása

Be kell állítania egy Microsoft Entra-alkalmazást, amely az előnyben részesített hitelesítési hitelesítő adatokhoz 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áshitelesítési konfigurációk a következők:

  • Titkos ügyfélkód
  • Tanúsítvány
  • Összevont identitás hitelesítő adatai

A Microsoft Entra-alkalmazások adott szerepkör-engedélyeket igényelhetnek a végrehajtott műveletektől függően. Az IoT Hub ikerpéldány-közreműködője például az IoT Hub-eszközökhöz és modulikrekhez való olvasási és írási hozzáférés engedélyezéséhez szükséges. 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ót a rövid útmutatóban talál: Alkalmazás regisztrálása a Microsoft Identitásplatform.

Hitelesítés DefaultAzureCredential használatával

A Microsoft Entra segítségével a legegyszerűbben a DefaultAzureCredential használatával hitelesíthet egy háttéralkalmazást, de ajánlott egy másik módszert használni egy éles környezetben, beleértve egy adott TokenCredential vagy pared-down ChainedTokenCredentialmetódust is. Az egyszerűség kedvéért ez a szakasz a hitelesítést és az ügyfél titkos kódjának használatát DefaultAzureCredential ismerteti. A használat DefaultAzureCredentialelőnyeiről és hátrányairól további információt a JavaScripthez készült Azure Identity ügyfélkódtár hitelesítőadat-láncai című témakörben talál .

A DefaultAzureCredential különböző hitelesítési mechanizmusokat támogat, és meghatározza a megfelelő hitelesítőadat-típust a környezet alapján, amelyben végrehajtja. Több hitelesítő adattípust próbál meg egy sorrendben használni, amíg nem talál egy működő hitelesítő adatot.

A Microsoft Entra a következő csomagot igényli:

npm install --save @azure/identity

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óját hozzáadtuk a környezeti változókhoz. Ezek a környezeti változók az DefaultAzureCredential alkalmazás hitelesítésére szolgálnak. A sikeres Microsoft Entra-hitelesítés eredménye egy biztonsági jogkivonat hitelesítő adatai, amelyet egy IoT Hub-kapcsolati módszernek ad át.

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

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

Az eredményül kapott hitelesítő jogkivonat ezután átadható a FromTokenCredential-nak , hogy csatlakozzon az IoT Hubhoz minden olyan SDK-ügyfélhez, amely elfogadja a Microsoft Entra hitelesítő adatait:

fromTokenCredential két paramétert igényel:

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

Ebben a példában az Azure-hitelesítő adatokat a rendszer a használatával szerzi be DefaultAzureCredential. A rendszer ezután az Azure-tartomány URL-címét és hitelesítő adatait adja meg Registry.fromTokenCredential 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ódminták

A Microsoft Entra szolgáltatáshitelesítés működő mintáit az Azure-identitásra vonatkozó példákban talál.

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

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

  1. Hívja meg a getFileNotificationReceiver parancsot. Adja meg annak a fájlfeltöltési visszahívási metódusnak a nevét, amely az értesítési üzenetek fogadásakor lesz meghívva.
  2. Fájlfeltöltési értesítések feldolgozása a visszahívási módszerben.

Ez a példa beállít egy értesítési visszahívási fogadót receiveFileUploadNotification . A fogadó értelmezi a fájlfeltöltés állapotadatait, és állapotüzenetet nyomtat ki 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ájlfeltöltési értesítési minta

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