Självstudie: Etablera enheter med hjälp av symmetriska nyckelregistreringsgrupper
Den här självstudien visar hur du på ett säkert sätt etablerar flera simulerade symmetriska nyckelenheter till en enda IoT Hub med hjälp av en registreringsgrupp.
Azure IoT Hub Device Provisioning Service stöder två typer av registreringar för etableringsenheter:
- Registreringsgrupper: används för att registrera flera relaterade enheter. Den här självstudien visar etablering med registreringsgrupper.
- Enskilda registreringar: Används för att registrera en enskild enhet.
Azure IoT Hub Device Provisioning Service stöder tre former av autentisering för etablering av enheter:
- X.509-certifikat
- Betrodd plattformsmodul (TPM)
- Symmetriska nycklar – Den här självstudien visar symmetrisk nyckelattestering
Vissa enheter kanske inte har något certifikat, TPM eller någon annan säkerhetsfunktion som kan användas för att identifiera enheten på ett säkert sätt. För sådana enheter innehåller Azure IoT Hub Device Provisioning Service (DPS) symmetrisk nyckelattestering. Symmetrisk nyckelattestering kan användas för att identifiera en enhet baserat på unik information som MAC-adressen eller ett serienummer.
I den här självstudien slutför du följande mål:
- Definiera ett unikt registrerings-ID för varje enhet.
- Skapa en registreringsgrupp som använder symmetrisk nyckelattestering.
- Skapa en enhetsnyckel för varje enhet med dess unika registrerings-ID och delade registreringsgruppnyckel.
- Etablera enheter med enhetsnyckeln och exempelkoden i Azure IoT-enhets-SDK:er.
Den här självstudien är inriktad på en Windows-baserad arbetsstation. Du kan dock utföra procedurerna i Linux. Ett Linux-exempel finns i Självstudie: Etablera för geo-svarstid.
Kommentar
Om du har slutfört snabbstarten tidigare: Etablera en simulerad symmetrisk nyckelenhet och fortfarande har konfigurerat dina Azure-resurser och din utvecklingsmiljö kan du fortsätta till Skapa en symmetrisk nyckelregistreringsgrupp i den här självstudien.
Förutsättningar
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Slutför stegen i Konfigurera IoT Hub Device Provisioning Service med Azure Portal.
Om du använder en Windows-utvecklingsmiljö installerar du Visual Studio 2022 med arbetsbelastningen "Skrivbordsutveckling med C++" aktiverad. Visual Studio 2019, Visual Studio 2017 och Visual Studio 2015 stöds också. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.
Installera det senaste CMake-byggsystemet. Kontrollera att du kontrollerar alternativet som lägger till den körbara CMake-filen i sökvägen.
Viktigt!
Kontrollera att Visual Studio-kraven (Visual Studio och arbetsbelastningen Skrivbordsutveckling med C++) är installerade på datorn innan du
CMake
startar installationen. När förutsättningarna är uppfyllda och nedladdningen har verifierats installerar du CMake-byggesystemet. Tänk också på att äldre versioner av CMake-byggsystemet inte kan generera lösningsfilen som används i den här artikeln. Se till att använda den senaste versionen av CMake.
Installera .NET SDK 6.0 eller senare på din Windows-baserade dator. Du kan använda följande kommando för att kontrollera din version.
dotnet --info
- Installera Node.js v4.0+.
- Installera Python 3.7 eller senare installerat på din Windows-baserade dator. Du kan kontrollera din version av Python genom att köra
python --version
.
Installera Java SE Development Kit 8 eller senare installerat på datorn.
Ladda ned och installera Maven.
- Installera den senaste versionen av Git. Kontrollera att Git har lagts till i de miljövariabler som är tillgängliga för kommandofönstret. Se Software Freedom Conservancys Git-klientverktyg för den senaste versionen av
git
verktyg som ska installeras, vilket inkluderar Git Bash, kommandoradsappen som du kan använda för att interagera med din lokala Git-lagringsplats.
Förbereda utvecklingsmiljön
I det här avsnittet förbereder du en utvecklingsmiljö för att skapa Azure IoT Device SDK för C. Exempelkoden etablerar enheten under enhetens startsekvens.
I en webbläsare går du till versionssidan för Azure IoT C SDK.
Kopiera taggnamnet för den senaste versionen av Azure IoT C SDK, till exempel:
lts_03_2024
.Öppna en Windows-kommandotolk och kör följande kommandon för att klona den senaste versionen av Azure IoT Device SDK för C GitHub-lagringsplatsen. Ersätt
<release-tag>
med taggen som du kopierade i föregående steg.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Den här åtgärden kan ta flera minuter att slutföra.
När åtgärden är klar kör du följande kommandon från
azure-iot-sdk-c
katalogen:mkdir cmake cd cmake
Kodexemplet använder en symmetrisk nyckel för att tillhandahålla attestering. Kör följande kommando för att skapa en version av SDK:n som är specifik för din utvecklingsklientplattform som innehåller enhetsetableringsklienten:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..
Dricks
Om
cmake
du inte hittar C++-kompilatorn kan du få byggfel när du kör kommandot ovan. Om det händer kan du prova att köra kommandot i Visual Studio-kommandotolken.När bygget har slutförts ser de sista utdataraderna ut ungefär som följande utdata:
$ cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON .. -- Building for: Visual Studio 16 2019 -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22621. -- The C compiler identification is MSVC 19.29.30146.0 -- The CXX compiler identification is MSVC 19.29.30146.0 ... -- Configuring done -- Generating done -- Build files have been written to: C:/azure-iot-sdk-c/cmake
Öppna en kommandotolk eller Git Bash-terminal.
Klona Azure IoT SDK för C# GitHub-lagringsplatsen med följande kommando:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Öppna en kommandotolk eller Git Bash-terminal.
Klona Azure IoT SDK för Node.js GitHub-lagringsplats med följande kommando:
git clone https://github.com/Azure/azure-iot-sdk-node.git --recursive
Öppna en kommandotolk eller Git Bash-terminal.
Klona Azure IoT Device SDK för Python GitHub-lagringsplatsen med följande kommando:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Kommentar
Exemplen som används i den här självstudien finns i v2-grenen på azure-iot-sdk-python-lagringsplatsen. V3 av Python SDK är tillgängligt för användning i betaversion. Information om hur du uppdaterar V2-kodexempel för att använda en V3-version av Python SDK finns i migreringsguiden för Azure IoT Device SDK för Python.
Öppna en kommandotolk eller Git Bash-terminal.
Klona Azure IoT SDK för Java GitHub-lagringsplatsen med följande kommando:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Gå till rotkatalogen
azure-iot-sdk-java
och skapa projektet för att ladda ned alla paket som behövs. Det här steget kan ta flera minuter att slutföra.cd azure-iot-sdk-java mvn install -DskipTests=true
Skapa en symmetrisk nyckelregistreringsgrupp
Logga in på Azure Portal och navigera till instansen av enhetsetableringstjänsten.
Välj Hantera registreringar i avsnittet Inställningar i navigeringsmenyn.
Välj Lägg till registreringsgrupp.
På fliken Registrering + etablering på sidan Lägg till registreringsgrupp anger du följande information för att konfigurera information om registreringsgruppen:
Fält beskrivning Attest Välj Symmetrisk nyckel som attesteringsmekanism. Inställningar för symmetrisk nyckel Markera rutan Generera symmetriska nycklar automatiskt om du vill använda slumpmässigt genererade nycklar. Avmarkera den här rutan om du vill ange egna nycklar. Gruppnamn Ange ett namn för gruppen med enheter. Namnet på registreringsgruppen är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus specialtecken: '-'
,'.'
,'_'
,':'
. Det sista tecknet måste vara alfanumeriskt eller streck ('-'
).Etableringsstatus Markera kryssrutan Aktivera den här registreringen om du vill att den här registreringsgruppen ska vara tillgänglig för att etablera enheter. Avmarkera den här rutan om du vill att gruppen ska inaktiveras. Du kan ändra den här inställningen senare. Ometableringsprincip Välj en återetableringsprincip som visar hur du vill att DPS ska hantera enheter som begär ometablering. Mer information finns i Ometableringsprinciper Välj Nästa: IoT-hubbar.
På fliken IoT-hubbar på sidan Lägg till registreringsgrupp anger du följande information för att avgöra vilka IoT-hubbar som registreringsgruppen kan etablera enheter till:
Fält beskrivning IoT-målhubbar Välj en eller flera av dina länkade IoT-hubbar eller lägg till en ny länk till en IoT-hubb. Mer information om hur du länkar IoT-hubbar till din DPS-instans finns i Länka och hantera IoT-hubbar. Allokeringsprincip Om du har valt fler än en länkad IoT-hubb väljer du hur du vill tilldela enheter till de olika hubbarna. Mer information om allokeringsprinciper finns i Använda allokeringsprinciper.
Om du bara valde en länkad IoT-hubb rekommenderar vi att du använder principen för jämnt viktad distribution .Välj Nästa: Enhetsinställningar
På fliken Enhetsinställningar på sidan Lägg till registreringsgrupp anger du följande information för att definiera hur nyligen etablerade enheter ska konfigureras:
Fält beskrivning IoT Edge Kontrollera Aktivera IoT Edge på etablerade enheter om alla enheter som etablerats via den här gruppen kör Azure IoT Edge. Avmarkera den här rutan om den här gruppen endast gäller för enheter som inte är IoT Edge-aktiverade. Antingen är alla enheter i en grupp IoT Edge-aktiverade eller så kan ingen vara det. Enhetstaggar Använd den här textrutan om du vill ange eventuella taggar som du vill använda för enhetstvillingar för etablerade enheter. Önskade egenskaper Använd den här textrutan om du vill ange önskade egenskaper som du vill använda för enhetstvillingar för etablerade enheter. Mer information finns i Understand and use device twins in IoT Hub (Förstå och använda enhetstvillingar i IoT Hub).
Välj Nästa: Granska + skapa.
På fliken Granska + skapa kontrollerar du alla dina värden och väljer sedan Skapa.
När du skapar registreringsgruppen genererar DPS en primärnyckel och en sekundär nyckel och lägger sedan till dem i registreringsposten. Din symmetriska nyckelregistreringsgrupp visas under kolumnen Gruppnamn på fliken Registreringsgrupper .
Öppna registreringen och kopiera värdet för primärnyckeln. Den här nyckeln är din gruppnyckel.
Välj ett unikt registrerings-ID för enheten
Ett unikt registrerings-ID måste definieras för att identifiera varje enhet. Du kan använda MAC-adressen, serienumret eller någon unik information från enheten.
I det här exemplet använder vi en kombination av en MAC-adress och ett serienummer som bildar följande sträng för ett registrerings-ID.
sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
Skapa unika registrerings-ID:n för varje enhet. Registrerings-ID:t är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus följande specialtecken: - . _ :
. Det sista tecknet måste vara alfanumeriskt eller streck (-
).
Härled en enhetsnyckel
Om du vill generera enhetsnycklar använder du den primära nyckeln för registreringsgruppen för att beräkna en HMAC-SHA256-hash för registrerings-ID:t för varje enhet. Resultatet konverteras sedan till Base 64-format för varje enhet.
Varning
Enhetskoden för varje enhet bör endast innehålla den härledda enhetsnyckeln för den enheten. Inkludera inte din grupps primärnyckel i enhetskoden. En komprometterad gruppnyckel kan äventyra säkerheten för alla enheter som autentiseras med den.
IoT-tillägget för Azure CLI tillhandahåller kommandot az iot dps enrollment-group compute-device-key för att generera härledda enhetsnycklar. Det här kommandot kan användas från både Windows- och Linux-system.
Ersätt värdet för parametern --key
med primärnyckeln från din registreringsgrupp.
Ersätt värdet för parametern --registration-id
med ditt registrerings-ID.
az iot dps enrollment-group compute-device-key --key <group_primary_key> --registration-id <device_registration_id>
Exempelresultat:
"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="
Varje enhet använder sin härledda enhetsnyckel och unika registrerings-ID för att utföra symmetrisk nyckelattestering med registreringsgruppen under etableringen.
Förbereda och köra enhetsetableringskoden
I det här avsnittet uppdaterar du enhetsexempelkoden för att skicka enhetens startsekvens till enhetsetableringstjänstens instans. Den här startsekvensen gör att enheten identifieras, autentiseras och tilldelas till en IoT-hubb som är länkad till enhetsetableringstjänstens instans.
Exempeletableringskoden utför följande uppgifter i ordning:
Autentiserar enheten med enhetsetableringsresursen med hjälp av följande tre parametrar:
- ID-omfånget för enhetsetableringstjänsten
- Registrerings-ID för din enhet.
- Den härledda enhetsnyckeln för din enhet.
Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.
Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:
På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.
Kopiera ID-omfångsvärdet.
I Visual Studio öppnar du lösningsfilen azure_iot_sdks.sln som har genererats genom att köra CMake. Lösningsfilen bör vara på följande plats:
\azure-iot-sdk-c\cmake\azure_iot_sdks.sln
Dricks
Om filen inte genererades i din cmake-katalog kontrollerar du att du har använt en ny version av CMake-byggsystemet.
I Fönstret Solution Explorer i Visual Studio går du till mappen Provision_Samples. Expandera exempelprojektet med namnet prov_dev_client_sample. Expandera Källfiler och öppna prov_dev_client_sample.c.
Leta reda på konstanten
id_scope
och ersätt värdet med det ID-omfångsvärde som du kopierade från Azure Portal.static const char* id_scope = "0ne00002193";
Hitta definitionen för funktionen
main()
i samma fil. Kontrollera att variabelnhsm_type
är inställd påSECURE_DEVICE_TYPE_SYMMETRIC_KEY
enligt nedan:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Hitta anropet till
prov_dev_set_symmetric_key_info()
i prov_dev_client_sample.c som har kommenterats ut.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
Avkommentera funktionsanropet och ersätt platshållarvärdena (inklusive vinkelparenteserna) med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten och den härledda enhetsnyckeln som du genererade i Härled en enhetsnyckel.
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6", "Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc=");
Varning
Tänk på att det här steget lämnar den härledda enhetsnyckeln inkluderad som en del av avbildningen för varje enhet, vilket inte är en rekommenderad metod för säkerhet. Detta är en av anledningarna till att säkerhet och användarvänlighet ofta är kompromisser. Du måste granska säkerheten för dina enheter helt baserat på dina egna krav.
Spara filen.
Högerklicka på projektet prov_dev_client_sample och välj Ange som startprojekt.
I Visual Studio-menyn väljer du Felsökning>Starta utan felsökning för att köra lösningen. I kommandotolken återskapa projektet väljer du Ja för att återskapa projektet innan du kör det.
Följande utdata är ett exempel på hur enheten ansluter till etableringstjänstinstansen som ska tilldelas till en IoT-hubb:
Provisioning API Version: 1.9.1 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-hub-2.azure-devices.net, deviceId: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 Press enter key to exit:
Exempeletableringskoden utför följande uppgifter:
Autentiserar enheten med enhetsetableringsresursen med hjälp av följande tre parametrar:
- ID-omfånget för enhetsetableringstjänsten
- Registrerings-ID för din enhet.
- Den härledda enhetsnyckeln för din enhet.
Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.
Skickar ett testmeddelande till IoT-hubben.
Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:
På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.
Kopiera ID-omfångsvärdet.
Öppna en kommandotolk och gå till SymmetricKeySample på den klonade SDK-lagringsplatsen:
cd .\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample
Öppna Parameters.cs i en textredigerare i mappen SymmetricKeySample. Den här filen visar de parametrar som refereras till av exemplet. Endast de tre första obligatoriska parametrarna används i den här artikeln när du kör exemplet. Granska koden i den här filen. Inga ändringar behövs.
Parameter Obligatoriskt Beskrivning --i
eller--IdScope
Sant ID-omfånget för DPS-instansen --r
eller--RegistrationId
Sant Enhetens registrerings-ID. Registrerings-ID:t är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus specialtecken: '-'
,'.'
,'_'
,':'
. Det sista tecknet måste vara alfanumeriskt eller streck ('-'
).--p
eller--PrimaryKey
Sant Primärnyckeln för en enskild registrering eller den härledda enhetsnyckeln för en gruppregistrering. --g
eller--GlobalDeviceEndpoint
Falsk Den globala slutpunkten för enheter att ansluta till. Standardvärdet är global.azure-devices-provisioning.net
--t
eller--TransportType
Falsk Transporten som ska användas för att kommunicera med enhetsetableringsinstansen. Standardvärdet är Mqtt
. Möjliga värden ärMqtt
,Mqtt_WebSocket_Only
,Mqtt_Tcp_Only
,Amqp
,Amqp_WebSocket_Only
,Amqp_Tcp_only
ochHttp1
.Öppna ProvisioningDeviceClientSample.cs i en textredigerare i mappen SymmetricKeySample. Den här filen visar hur klassen SecurityProviderSymmetricKey fungerar med klassen ProvisioningDeviceClient för att etablera din simulerade symmetriska nyckelenhet. Granska koden i den här filen. Inga ändringar behövs.
Skapa och kör exempelkoden med följande kommando:
- Ersätt
<id-scope>
med det ID-omfång som du kopierade från Azure Portal. - Ersätt
<registration-id>
med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten. - Ersätt
<primarykey>
med den härledda enhetsnyckeln som du genererade.
dotnet run --i <id-scope> --r <registration-id> --p <primarykey>
- Ersätt
Du bör se något som liknar följande utdata. En "TestMessage"-sträng skickas till hubben som ett testmeddelande.
D:\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample>dotnet run --i 0ne00000A0A --r sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 --p sbDDeEzRuEuGKag+kQKV+T1QGakRtHpsERLP0yPjwR93TrpEgEh/Y07CXstfha6dhIPWvdD1nRxK5T0KGKA+nQ== Initializing the device provisioning client... Initialized for registration Id sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6. Registering with the device provisioning service... Registration status: Assigned. Device sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 registered to contoso-hub-2.azure-devices.net. Creating symmetric key authentication for IoT Hub... Testing the provisioned device with IoT Hub... Sending a telemetry message... Finished.
Exempeletableringskoden utför följande uppgifter i ordning:
Autentiserar enheten med enhetsetableringsresursen med hjälp av följande fyra parametrar:
PROVISIONING_HOST
PROVISIONING_IDSCOPE
PROVISIONING_REGISTRATION_ID
PROVISIONING_SYMMETRIC_KEY
Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.
Skickar ett testtelemetrimeddelande till IoT-hubben.
Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:
På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.
Kopiera ID-omfångsvärdet.
Öppna en kommandotolk för att köra Node.js kommandon och gå till följande katalog:
cd azure-iot-sdk-node\provisioning\device\samples
I mappen provisioning/device/samples öppnar du register_symkey.js och granskar koden.
Exemplet är som standard MQTT som transportprotokoll. Om du vill använda ett annat protokoll kommenterar du ut följande rad och avkommentarer raden för lämpligt protokoll.
var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
Observera också att exempelkoden anger en anpassad nyttolast:
provisioningClient.setProvisioningPayload({a: 'b'});
Du kan kommentera ut den här koden eftersom den inte behövs för den här självstudien. Du kan använda en anpassad nyttolast när du använder en anpassad allokeringswebbhook för att tilldela enheten till en IoT Hub. Mer information finns i Självstudie: Använda anpassade allokeringsprinciper.
Metoden
provisioningClient.register()
försöker registrera enheten.I kommandotolken kör du följande kommandon för att ange miljövariabler som används av exemplet:
- Det första kommandot anger
PROVISIONING_HOST
miljövariabeln till slutpunkten Global enhet. Den här slutpunkten är densamma för alla DPS-instanser. - Ersätt
<id-scope>
med det ID-omfång som du kopierade från Azure Portal. - Ersätt
<registration-id>
med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten. - Ersätt
<derived-device-key>
med den härledda enhetsnyckeln som du genererade i Härled en enhetsnyckel.
set PROVISIONING_HOST=global.azure-devices-provisioning.net
set PROVISIONING_IDSCOPE=<id-scope>
set PROVISIONING_REGISTRATION_ID=<registration-id>
set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
- Det första kommandot anger
Skapa och kör exempelkoden med hjälp av följande kommandon:
npm install
node register_symkey.js
Du bör nu se något som liknar följande utdata. En "Hello World"-sträng skickas till hubben som ett testmeddelande.
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 payload=undefined Client connected send status: MessageEnqueued
Exempeletableringskoden utför följande uppgifter i ordning:
Autentiserar enheten med enhetsetableringsresursen med hjälp av följande fyra parametrar:
PROVISIONING_HOST
PROVISIONING_IDSCOPE
PROVISIONING_REGISTRATION_ID
PROVISIONING_SYMMETRIC_KEY
Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.
Skickar ett testmeddelande till IoT-hubben.
Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:
På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.
Kopiera ID-omfångsvärdet.
Öppna en kommandotolk och gå till katalogen där exempelfilen provision_symmetric_key.py finns.
cd azure-iot-sdk-python\samples\async-hub-scenarios
I kommandotolken kör du följande kommandon för att ange miljövariabler som används av exemplet:
- Det första kommandot anger
PROVISIONING_HOST
miljövariabeln till slutpunkten Global enhet. Den här slutpunkten är densamma för alla DPS-instanser. - Ersätt
<id-scope>
med det ID-omfång som du kopierade från Azure Portal. - Ersätt
<registration-id>
med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten. - Ersätt
<derived-device-key>
med den härledda enhetsnyckeln som du genererade i Härled en enhetsnyckel.
set PROVISIONING_HOST=global.azure-devices-provisioning.net
set PROVISIONING_IDSCOPE=<id-scope>
set PROVISIONING_REGISTRATION_ID=<registration-id>
set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
- Det första kommandot anger
Installera biblioteket azure-iot-device genom att köra följande kommando.
pip install azure-iot-device
Kör Python-exempelkoden i provision_symmetric_key.py.
python provision_symmetric_key.py
Du bör nu se något som liknar följande utdata. Några exempel på telemetrimeddelanden för vindhastighet skickas också till hubben som ett test.
D:\azure-iot-sdk-python\samples\async-hub-scenarios>python provision_symmetric_key.py The complete registration result is sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 contoso-hub-2.azure-devices.net initialAssignment null Will send telemetry from the provisioned device sending message #1 sending message #2 sending message #3 sending message #4 sending message #5 sending message #6 sending message #7 sending message #8 sending message #9 sending message #10 done sending message #1 done sending message #2 done sending message #3 done sending message #4 done sending message #5 done sending message #6 done sending message #7 done sending message #8 done sending message #9 done sending message #10
Exempeletableringskoden utför följande uppgifter i ordning:
Autentiserar enheten med enhetsetableringsresursen med hjälp av följande fyra parametrar:
GLOBAL_ENDPOINT
SCOPE_ID
REGISTRATION_ID
SYMMETRIC_KEY
Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.
Skickar ett testmeddelande till IoT-hubben.
Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:
På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.
Kopiera ID-omfångsvärdet.
Öppna Java-enhetens exempelkod för redigering. Den fullständiga sökvägen till enhetens exempelkod är:
azure-iot-sdk-java/provisioning/provisioning-samples/provisioning-symmetrickey-individual-sample/src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningSymmetricKeyIndividualEnrollmentSample.java
Ange värdet för följande variabler för din DPS- och enhetsregistrering:
- Ersätt
[Your scope ID here]
med det ID-omfång som du kopierade från Azure Portal. - Ersätt
[Your Provisioning Service Global Endpoint here]
med den globala enhetsslutpunkten: global.azure-devices-provisioning.net. Den här slutpunkten är densamma för alla DPS-instanser. - Ersätt
[Enter your Symmetric Key here]
med den härledda enhetsnyckeln som du genererade i Härled en enhetsnyckel. - Ersätt
[Enter your Registration ID here]
med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten.
private static final String SCOPE_ID = "[Your scope ID here]"; private static final String GLOBAL_ENDPOINT = "[Your Provisioning Service Global Endpoint here]"; private static final String SYMMETRIC_KEY = "[Enter your Symmetric Key here]"; private static final String REGISTRATION_ID = "[Enter your Registration ID here]";
Varning
Tänk på att det här steget lämnar den härledda enhetsnyckeln inkluderad som en del av avbildningen för varje enhet, vilket inte är en rekommenderad metod för säkerhet. Detta är en av anledningarna till att säkerhet och användarvänlighet ofta är kompromisser. Du måste granska säkerheten för dina enheter helt baserat på dina egna krav.
- Ersätt
Öppna en kommandotolk för att skapa. Gå till projektmappen för etableringsexempel för Java SDK-lagringsplatsen.
cd azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-symmetrickey-individual-sample
Skapa exemplet.
mvn clean install
Gå till
target
mappen och kör den skapade.jar
filen.java
I kommandot ersätter du{version}
platshållaren med versionen i.jar
filnamnet på datorn.cd target java -jar ./provisioning-symmetrickey-individual-sample-{version}-with-deps.jar
Du bör nu se något som liknar följande utdata.
Starting... Beginning setup. WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance. 2022-10-07 18:14:48,388 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2 2022-10-07 18:14:48,390 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread... Waiting for Provisioning Service to register 2022-10-07 18:14:48,392 INFO (global.azure-devices-provisioning.net-002edcf5-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service... 2022-10-07 18:14:48,518 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message 2022-10-07 18:14:48,521 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using symmetric key 2022-10-07 18:14:49,252 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device... 2022-10-07 18:14:49,253 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING 2022-10-07 18:14:52,459 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully IotHUb Uri : contoso-hub-2.azure-devices.net Device ID : sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 2022-10-07 18:14:58,424 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-10-07 18:14:58,436 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-10-07 18:14:58,440 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.1 2022-10-07 18:14:58,450 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection... 2022-10-07 18:14:58,471 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet... 2022-10-07 18:14:59,314 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged 2022-10-07 18:14:59,315 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/# 2022-10-07 18:14:59,378 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/# was acknowledged 2022-10-07 18:14:59,379 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully 2022-10-07 18:14:59,381 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established 2022-10-07 18:14:59,383 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK 2022-10-07 18:14:59,389 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads 2022-10-07 18:14:59,392 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details 2022-10-07 18:14:59,395 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully 2022-10-07 18:14:59,404 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully Sending message from device to IoT Hub... 2022-10-07 18:14:59,408 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) Press any key to exit... 2022-10-07 18:14:59,409 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-10-07 18:14:59,777 DEBUG (MQTT Call: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-10-07 18:14:59,779 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message received! Response status: OK
Bekräfta registreringen av enhetsetablering
I den här självstudien använde du allokeringsprincipen för statisk konfiguration för att tilldela enheter som registreras via registreringsgruppen till samma IoT-hubb. För allokeringar där en enhet kan etableras till en av flera IoT-hubbar kan du dock undersöka registreringsgruppens registreringsposter för att se vilken IoT-hubb som enheten har etablerats till:
I Azure Portal går du till din DPS-instans.
I menyn Inställningar väljer du Hantera registreringar.
Välj Registreringsgrupper.
Välj den registreringsgrupp som du skapade för den här självstudien.
På sidan Information om registreringsgrupp väljer du Registreringsstatus.
Leta reda på enhets-ID:t för enhets-ID-kolumnen och anteckna IoT-hubben i kolumnen Tilldelad IoT-hubb.
Du kan välja enhetsposten för att se mer information som den första tvillingen som tilldelats enheten.
Så här verifierar du enheten på din IoT-hubb:
I Azure Portal går du till den IoT-hubb som enheten har tilldelats till.
I menyn Enhetshantering väljer du Enheter.
Om enheten har etablerats bör dess enhets-ID visas i listan med Status inställd som aktiverad. Om du inte ser enheten väljer du Uppdatera.
Kommentar
Om du ändrade det första enhetstvillingtillståndet från standardvärdet i registreringsgruppen kan en enhet hämta önskat tvillingtillstånd från hubben och agera därefter. Mer information finns i Understand and use device twins in IoT Hub (Förstå och använda enhetstvillingar i IoT Hub).
Etablera fler enheter
Om du vill etablera fler enheter via registreringsgruppen följer du stegen i föregående avsnitt för att:
Härled en enhetsnyckel. Precis som tidigare använder du primärnyckeln för registreringsgruppen som gruppnyckel.
Kör enhetsetableringskoden. Ersätt nödvändiga artefakter med din nya härledda enhetsnyckel och registrerings-ID.
Rensa resurser
Om du planerar att fortsätta arbeta med och utforska enhetsklientexemplet ska du inte rensa resurserna som skapades i den här självstudien. Om du inte planerar att fortsätta använder du följande steg för att ta bort alla resurser som skapats i den här självstudien.
Ta bort din registreringsgrupp
Om du tar bort en registreringsgrupp tas inte de registreringsposter som är associerade med den bort. Dessa överblivna poster räknas mot registreringskvoten för DPS-instansen. Därför är det bästa praxis att ta bort alla registreringsposter som är associerade med en registreringsgrupp innan du tar bort själva registreringsgruppen.
I Azure Portal går du till din DPS-instans.
I menyn Inställningar väljer du Hantera registreringar.
Välj fliken Registreringsgrupper .
Välj namnet på den registreringsgrupp som du använde för den här självstudien för att öppna informationssidan.
På sidan Registreringsinformation väljer du Registreringsstatus. Markera sedan kryssrutan bredvid kolumnrubriken Enhets-ID för att markera alla registreringsposter för registreringsgruppen. Välj Ta bort överst på sidan för att ta bort registreringsposterna.
Gå tillbaka till Sidan Hantera registreringar.
Markera kryssrutan bredvid namnet på den registreringsgrupp som du använde för den här självstudien.
Välj Ta bort längst upp på sidan.
Ta bort enhetsregistreringar från IoT Hub
I Azure Portal går du till den IoT-hubb som enheten har tilldelats till.
Välj Enheter i avsnittet Enhetshantering i navigeringsmenyn.
Markera kryssrutan bredvid enhets-ID för de enheter som du registrerade i den här självstudien.
Välj Ta bort längst upp på sidan.
Nästa steg
I den här självstudien etablerade du flera enheter till en enda IoT-hubb med hjälp av en registreringsgrupp. Lär dig sedan hur du etablerar IoT-enheter över flera hubbar.