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


Ismerkedés az IoT Hub modul identitásával és ikermoduljával (Node.js)

A modulidentitások és modulikrek az Azure IoT Hub eszközidentitásához és eszközikeréhez hasonlók, de nagyobb részletességet biztosítanak. Bár az Azure IoT Hub eszközidentitása és ikereszköze lehetővé teszi a háttéralkalmazás számára az eszköz konfigurálását és az eszköz feltételeinek láthatóságát, a modulidentitás és a modul ikerpéldánya biztosítja ezeket a képességeket az eszköz egyes összetevői számára. Több összetevővel rendelkező, például operációsrendszer-eszközökkel vagy belső vezérlőprogram-eszközökkel rendelkező eszközökön lehetővé teszi az egyes összetevők elkülönített konfigurációját és feltételeit.

Feljegyzés

A cikkben ismertetett funkciók csak az IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub-szintekről további információt a megoldáshoz megfelelő IoT Hub-szint kiválasztása című témakörben talál.

A cikk végén két Node.js alkalmazás érhető el:

  • CreateIdentities: létrehoz egy eszközidentitást, egy modulidentitást és a kapcsolódó biztonsági kulcsokat az eszköz- és modulügyfelek összekapcsolásához.

  • UpdateModuleTwinReportedProperties: frissített modul ikermodult, jelentett tulajdonságokat küld az IoT Hubnak.

Feljegyzés

Az eszköz- és háttéralkalmazások készítéséhez elérhető SDK-eszközökről az Azure IoT SDK-kban talál további információt.

Előfeltételek

Modulhitelesítés

A modulidentitások hitelesítéséhez szimmetrikus kulcsokat vagy X.509-tanúsítványokat használhat. Az X.509-tanúsítványhitelesítéshez a modul tanúsítványának a köznapi neve (CN) formátumával CN=<deviceid>/<moduleid>kell rendelkeznie. Példa:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

Az IoT Hub kapcsolati sztring lekérése

Ebben a cikkben egy háttérszolgáltatást hoz létre, amely hozzáad egy eszközt az identitásjegyzékhez, majd hozzáad egy modult az adott eszközhöz. A szolgáltatáshoz a beállításjegyzék írási engedélye szükséges. Alapértelmezés szerint minden IoT Hub egy registryReadWrite nevű megosztott hozzáférési szabályzattal jön létre, amely megadja ezt az engedélyt.

Az IoT Hub kapcsolati sztring a registryReadWrite szabályzathoz való lekéréséhez kövesse az alábbi lépéseket:

  1. Az Azure Portalon válassza ki az Erőforráscsoportokat. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.

  2. A központ bal oldali ablaktábláján válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  3. A szabályzatok listájában válassza ki a registryReadWrite szabályzatot .

  4. Másolja ki az elsődleges kapcsolati sztring, és mentse az értéket.

    Képernyőfelvétel, amely bemutatja, hogyan kérhető le a kapcsolati sztring

További információ az IoT Hub megosztott hozzáférési szabályzatairól és engedélyeiről: Hozzáférés-vezérlés és engedélyek.

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>.

Eszközidentitás és modulidentitás létrehozása az IoT Hubban

Ebben a szakaszban egy Node.js alkalmazást hoz létre, amely egy eszközidentitást és egy modulidentitást hoz létre az IoT Hub identitásjegyzékében. Egy eszköz vagy modul csak akkor tud csatlakozni az IoT Hubhoz, ha van bejegyzése az identitásjegyzékben. További információ: Az identitásjegyzék ismertetése az IoT Hubon. A konzolalkalmazás a futtatásakor egy egyedi azonosítót és kulcsot állít elő az eszköz és a modul számára. Az azonosító és a kulcs megkülönbözteti a kis- és nagybetűket. Ezekkel az értékekkel az eszköz és a modul azonosítani tudja magát, amikor az eszközről a felhőbe irányuló üzeneteket küld az IoT Hubnak.

Fontos

Ez a cikk az eszközök közös hozzáférésű jogosultságkóddal, más néven szimmetrikus kulcshitelesítéssel való csatlakoztatásának lépéseit tartalmazza. Ez a hitelesítési módszer alkalmas tesztelésre és kiértékeléshez, de az eszköz hitelesítése X.509-tanúsítványokkal biztonságosabb módszer. További információkért tekintse meg a kapcsolatbiztonság ajánlott biztonsági eljárásait>.

  1. Hozzon létre egy könyvtárat a kód tárolásához.

  2. A könyvtáron belül először futtassa az npm init -y parancsot egy üres package.json alapértelmezett értékekkel való létrehozásához. Ez a kód projektfájlja.

  3. Futtassa az npm install -S azure-iothub@modules-preview parancsot a szolgáltatás SDK telepítéséhez a node_modules alkönyvtárban.

    Feljegyzés

    Az alkönyvtár neve node_modules a modul szót használja a "csomóponttár" kifejezésre. Ennek a kifejezésnek semmi köze az IoT Hub-modulokhoz.

  4. Hozza létre a következő .js fájlt a címtárban. Hívja add.js. Másolja és illessze be a központ kapcsolati sztring és a központ nevét.

    var Registry = require('azure-iothub').Registry;
    var uuid = require('uuid');
    // Copy/paste your connection string and hub name here
    var serviceConnectionString = '<hub connection string from portal>';
    var hubName = '<hub name>.azure-devices.net';
    // Create an instance of the IoTHub registry
    var registry = Registry.fromConnectionString(serviceConnectionString);
    // Insert your device ID and moduleId here.
    var deviceId = 'myFirstDevice';
    var moduleId = 'myFirstModule';
    // Create your device as a SAS authentication device
    var primaryKey = new Buffer(uuid.v4()).toString('base64');
    var secondaryKey = new Buffer(uuid.v4()).toString('base64');
    var deviceDescription = {
      deviceId: deviceId,
      status: 'enabled',
      authentication: {
        type: 'sas',
        symmetricKey: {
          primaryKey: primaryKey,
          secondaryKey: secondaryKey
        }
      }
    };
    
    // First, create a device identity
    registry.create(deviceDescription, function(err) {
      if (err) {
        console.log('Error creating device identity: ' + err);
        process.exit(1);
      }
      console.log('device connection string = "HostName=' + hubName + ';DeviceId=' + deviceId + ';SharedAccessKey=' + primaryKey + '"');
    
      // Then add a module to that device
      registry.addModule({ deviceId: deviceId, moduleId: moduleId }, function(err) {
        if (err) {
          console.log('Error creating module identity: ' + err);
          process.exit(1);
        }
    
        // Finally, retrieve the module details from the hub so we can construct the connection string
        registry.getModule(deviceId, moduleId, function(err, foundModule) {
          if (err) {
            console.log('Error getting module back from hub: ' + err);
            process.exit(1);
          }
          console.log('module connection string = "HostName=' + hubName + ';DeviceId=' + foundModule.deviceId + ';ModuleId='+foundModule.moduleId+';SharedAccessKey=' + foundModule.authentication.symmetricKey.primaryKey + '"');
          process.exit(0);
        });
      });
    });
    
    

Ez az alkalmazás létrehoz egy eszközidentitást a myFirstDevice azonosítóval és egy myFirstModule azonosítóval rendelkező modulidentitást a myFirstDevice eszköz alatt. (Ha ez a modulazonosító már létezik az identitásjegyzékben, a kód egyszerűen lekéri a meglévő moduladatokat.) Az alkalmazás ezután megjeleníti az identitás elsődleges kulcsát. Ezt a kulcsot a szimulált modulalkalmazásban használja az IoT Hubhoz való csatlakozáshoz.

Futtassa ezt a csomópont add.js használatával. Ez egy kapcsolati sztring biztosít az eszközidentitáshoz, és egy másikat a modul identitásához.

Feljegyzés

Az IoT Hub-identitásjegyzék csak az IoT Hub biztonságos elérésének biztosításához tárolja az eszköz- és modulidentitásokat. Az identitásjegyzék tárolja az eszközazonosítókat és -kulcsot, és biztonsági hitelesítő adatokként használja őket. Az identitásjegyzék minden egyes eszközhöz tárol egy engedélyezve/letiltva jelzőt is, amellyel letilthatja az eszköz hozzáférését. Ha az alkalmazásnak más eszközspecifikus metaadatokat kell tárolnia, egy alkalmazásspecifikus tárolót kell használnia. A modulidentitások esetében nincs engedélyezési/letiltási jelző. További információ : Az identitásjegyzék ismertetése az IoT Hubban az IoT Hub fejlesztői útmutatójában.

A modul ikerpéldányának frissítése Node.js eszköz SDK-val

Ebben a szakaszban egy Node.js alkalmazást hoz létre a szimulált eszközön, amely frissíti a modul ikerpéldányának jelentett tulajdonságait.

  1. Szerezze be a modul kapcsolati sztring. Jelentkezzen be az Azure Portalra. Lépjen az IoT Hubra, és válassza ki az IoT-eszközöket. Keresse meg a myFirstDevice-t, nyissa meg, és láthatja, hogy a myFirstModule sikeresen létrejött. Másolja ki a modul kapcsolati sztringjét. A következő lépés során szükség lesz rá.

    Az Azure Portal moduladatai

  2. Az előző szakaszban ismertetettekhez hasonlóan hozzon létre egy könyvtárat az eszköz kódjához, és az npm használatával inicializálja és telepítse az eszköz SDK-t (npm install -S azure-iot-device-amqp@modules-preview).

    Feljegyzés

    Az npm telepítési parancsa lassúnak tűnhet. Legyen türelmes; sok kódot von le a csomagtárházból.

    Feljegyzés

    Ha olyan hibaüzenet jelenik meg, amely azt jelzi, hogy npm ERR! beállításjegyzék-hiba a json elemzésekor, ezt nyugodtan figyelmen kívül hagyhatja. Ha olyan hibaüzenet jelenik meg, amely azt jelzi, hogy npm ERR! beállításjegyzék-hiba a json elemzésekor, ezt nyugodtan figyelmen kívül hagyhatja.

  3. Hozzon létre egy twin.js nevű fájlt. Másolja és illessze be a modul identitási sztringét.

    var Client = require('azure-iot-device').Client;
    var Protocol = require('azure-iot-device-amqp').Amqp;
    // Copy/paste your module connection string here.
    var connectionString = '<insert module connection string here>';
    // Create a client using the Amqp protocol.
    var client = Client.fromConnectionString(connectionString, Protocol);
    client.on('error', function (err) {
      console.error(err.message);
    });
    // connect to the hub
    client.open(function(err) {
      if (err) {
        console.error('error connecting to hub: ' + err);
        process.exit(1);
      }
      console.log('client opened');
    // Create device Twin
      client.getTwin(function(err, twin) {
        if (err) {
          console.error('error getting twin: ' + err);
          process.exit(1);
        }
        // Output the current properties
        console.log('twin contents:');
        console.log(twin.properties);
        // Add a handler for desired property changes
        twin.on('properties.desired', function(delta) {
            console.log('new desired properties received:');
            console.log(JSON.stringify(delta));
        });
        // create a patch to send to the hub
        var patch = {
          updateTime: new Date().toString(),
          firmwareVersion:'1.2.1',
          weather:{
            temperature: 72,
            humidity: 17
          }
        };
        // send the patch
        twin.properties.reported.update(patch, function(err) {
          if (err) throw err;
          console.log('twin state reported');
        });
      });
    });
    
  4. Most futtassa ezt a parancscsomóponttal twin.js.

    F:\temp\module_twin>node twin.js
    

    Ezután a következőt fogja látni:

    client opened
    twin contents:
    { reported: { update: [Function: update], '$version': 1 },
      desired: { '$version': 1 } }
    new desired properties received:
    {"$version":1}
    twin state reported
    

Következő lépések

További bevezetés az IoT Hub használatába, valamint egyéb IoT-forgatókönyvek megismerése: