Förstå identitetsregistret i din IoT-hubb
Varje IoT-hubb har ett identitetsregister som lagrar information om de enheter och moduler som tillåts ansluta till IoT-hubben. Innan en enhet eller modul kan ansluta till en IoT-hubb måste det finnas en post för enheten eller modulen i IoT-hubbens identitetsregister. En enhet eller modul måste också autentiseras med IoT-hubben baserat på autentiseringsuppgifter som lagras i identitetsregistret.
Enhets- eller modul-ID:t som lagras i identitetsregistret är skiftlägeskänsligt.
På hög nivå är identitetsregistret en REST-kompatibel samling av enhets- eller modulidentitetsresurser. När du lägger till en post i identitetsregistret skapar IoT Hub en uppsättning resurser per enhet, till exempel kön som innehåller meddelanden från molnet till enheten under flygning.
Använd identitetsregistret när du behöver:
- Etablera enheter eller moduler som ansluter till din IoT-hubb.
- Kontrollera åtkomsten per enhet/per modul till hubbens enhets- eller moduluppkopplade slutpunkter.
Identitetsregisteråtgärder
IoT Hub-identitetsregistret exponerar följande åtgärder:
- Skapa enhets- eller modulidentitet
- Uppdatera enhets- eller modulidentitet
- Hämta enhets- eller modulidentitet efter ID
- Ta bort enhets- eller modulidentitet
- Lista upp till 1 000 identiteter
- Exportera enhetsidentiteter till Azure Blob Storage
- Importera enhetsidentiteter från Azure Blob Storage
Alla dessa åtgärder kan använda optimistisk samtidighet enligt RFC7232.
Viktigt!
Det enda sättet att hämta alla identiteter i en IoT-hubbs identitetsregister är att använda exportfunktionen .
Ett IoT Hub-identitetsregister:
- Innehåller inga programmetadata.
Viktigt!
Använd endast identitetsregistret för enhetshantering och etableringsåtgärder. Åtgärder med högt dataflöde vid körning bör inte vara beroende av att utföra åtgärder i identitetsregistret. Att till exempel kontrollera anslutningstillståndet för en enhet innan du skickar ett kommando är inte ett mönster som stöds. Kontrollera begränsningsfrekvensen för identitetsregistret.
Kommentar
Det kan ta några sekunder innan en enhets- eller modulidentitet är tillgänglig för hämtning när den har skapats. Försök att get
utföra enhets- eller modulidentiteter igen vid fel.
Inaktivera enheter
Du kan inaktivera enheter genom att uppdatera statusegenskapen för en identitet i identitetsregistret. Vanligtvis använder du den här egenskapen i två scenarier:
Under en etableringsorkestreringsprocess. Mer information finns i Enhetsetablering.
Om du tror att en enhet har komprometterats eller har blivit obehörig av någon anledning.
Viktigt!
IoT Hub kontrollerar inte listan över återkallade certifikat när enheter med certifikatbaserad autentisering autentiseras. Om du har en enhet som måste blockeras från att ansluta till IoT Hub på grund av ett potentiellt komprometterat certifikat bör du inaktivera enheten i identitetsregistret.
Den här funktionen är inte tillgänglig för moduler.
Mer information finns i Inaktivera eller ta bort en enhet i en IoT-hubb.
Importera och exportera enhetsidentiteter
Använd asynkrona åtgärder på IoT Hub-resursproviderns slutpunkt för att exportera enhetsidentiteter massvis från en IoT-hubbs identitetsregister. Exporter är långvariga jobb som använder en blobcontainer från kunden för att spara enhetsidentitetsdata som lästs från identitetsregistret.
Använd asynkrona åtgärder på IoT Hub-resursproviderns slutpunkt för att importera enhetsidentiteter i grupp till en IoT-hubbs identitetsregister. Importer är långvariga jobb som använder data i en blobcontainer som tillhandahålls av kunden för att skriva enhetsidentitetsdata till identitetsregistret.
Mer information om API:er för import och export finns i REST-API:er för IoT Hub-resursprovider. Mer information om hur du kör import- och exportjobb finns i Masshantering av IoT Hub-enhetsidentiteter.
Enhetsidentiteter kan också exporteras och importeras från en IoT-hubb med hjälp av tjänst-API:et via rest-API:et eller någon av IoT Hub-tjänst-SDK:erna.
Enhetsetablering
De enhetsdata som en viss IoT-lösning lagrar beror på de specifika kraven för lösningen. Men som ett minimum måste en lösning lagra enhetsidentiteter och autentiseringsnycklar. Azure IoT Hub innehåller ett identitetsregister som kan lagra värden för varje enhet, till exempel ID:n, autentiseringsnycklar och statuskoder. En lösning kan använda andra Azure-tjänster, till exempel Table Storage, Blob Storage eller Azure Cosmos DB för att lagra andra enhetsdata.
Enhetsetablering är processen att lägga till initiala enhetsdata i butikerna i din lösning. Om du vill aktivera en ny enhet för att ansluta till din hubb måste du lägga till ett enhets-ID och nycklar till IoT Hub-identitetsregistret. Som en del av etableringsprocessen kan du behöva initiera enhetsspecifika data i andra lösningslager. Du kan också använda Azure IoT Hub Device Provisioning Service för att aktivera zero-touch- och just-in-time-etablering till en eller flera IoT-hubbar utan att kräva mänsklig inblandning. Mer information finns i dokumentationen för etableringstjänsten.
Meddelanden om enhets- och modullivscykel
IoT Hub kan meddela din IoT-lösning när en enhetsidentitet skapas eller tas bort genom att skicka livscykelmeddelanden. För att göra det måste din IoT-lösning skapa en väg och ange datakällan lika med DeviceLifecycleEvents. Som standard skickas inga livscykelmeddelanden, d.v.s. inga sådana vägar finns i förväg. Genom att skapa en väg med datakällan lika med DeviceLifecycleEvents skickas livscykelhändelser för både enhetsidentiteter och modulidentiteter. Meddelandeinnehållet varierar beroende på om händelserna genereras för modulidentiteter eller enhetsidentiteter. Mer information om egenskaper och brödtext som returneras i meddelandemeddelandet finns i Händelsescheman som inte är telemetri.
Meddelanden för att skapa modulidentiteter skiljer sig åt för IoT Edge-moduler än för andra moduler. För IoT Edge-moduler skickas skapa-meddelandet endast om motsvarande IoT Edge-enhet körs. För alla andra moduler skickas livscykelmeddelanden när modulidentiteten uppdateras på IoT Hub-sidan.
Egenskaper för enhetsidentitet
Enhetsidentiteter representeras som JSON-dokument med följande egenskaper:
Property | Alternativ | Description |
---|---|---|
deviceId | nödvändiga, skrivskyddade uppdateringar | En skiftlägeskänslig sträng (upp till 128 tecken lång) med 7-bitars alfanumeriska ASCII-tecken plus vissa specialtecken: - . % _ * ? ! ( ) , : = @ $ ' . Specialtecken: + # stöds inte. |
generationId | obligatoriskt, skrivskyddat | En IoT Hub-genererad, skiftlägeskänslig sträng upp till 128 tecken lång. Det här värdet används för att särskilja enheter med samma deviceId när de har tagits bort och återskapats. |
etag | obligatoriskt, skrivskyddat | En sträng som representerar en svag ETag för enhetsidentiteten enligt RFC7232. |
autentisering | valfri | Ett sammansatt objekt som innehåller autentiseringsinformation och säkerhetsmaterial. Mer information finns i autentiseringsmekanismen i REST API-dokumentationen. |
funktioner | valfri | Enhetens uppsättning funktioner. Till exempel om enheten är en gränsenhet eller inte. Mer information finns i Enhetsfunktioner i REST API-dokumentationen. |
deviceScope | valfri | Enhetens omfång. I edge-enheter genereras automatiskt och oföränderliga. Inaktuell i icke-edge-enheter. I underordnade (löv)-enheter anger du dock den här egenskapen till samma värde som egenskapen parentScopes (deviceScope för den överordnade enheten) för bakåtkompatibilitet med tidigare versioner av API:et. Mer information finns i IoT Edge som en gateway: Överordnade och underordnade relationer. |
parentScopes | valfri | Omfånget för en underordnad enhets direkta överordnade enhet (värdet för egenskapen deviceScope för den överordnade enheten). I gränsenheter är värdet tomt om enheten inte har någon överordnad. I icke-gränsenheter finns inte egenskapen om enheten inte har någon överordnad. Mer information finns i IoT Edge som en gateway: Överordnade och underordnade relationer. |
status | required | En åtkomstindikator. Kan aktiveras eller inaktiveras. Om aktiverad tillåts enheten att ansluta. Om den här enheten är inaktiverad kan den inte komma åt någon enhetsuppkopplad slutpunkt. |
statusReason | valfri | En 128 tecken lång sträng som lagrar orsaken till enhetens identitetsstatus. Alla UTF-8 tecken tillåts. |
statusUpdateTime | skrivskyddad | En tidsindikator som visar datum och tid för den senaste statusuppdateringen. |
connectionState | skrivskyddad | Ett fält som anger anslutningsstatus: antingen Ansluten eller Frånkopplad. Det här fältet representerar IoT Hub-vyn för enhetens anslutningsstatus. Viktigt: Det här fältet bör endast användas i utvecklings-/felsökningssyfte. Anslutningstillståndet uppdateras endast för enheter som använder MQTT eller AMQP. Dessutom baseras den på ping på protokollnivå (MQTT-ping eller AMQP-ping) och kan ha en maximal fördröjning på bara 5 minuter. Av dessa skäl kan det finnas falska positiva identifieringar, till exempel frånkopplade enheter som rapporteras som anslutna. |
connectionStateUpdatedTime | skrivskyddad | En tidsindikator som visar datum och senaste gång anslutningstillståndet uppdaterades. |
lastActivityTime | skrivskyddad | En tidsindikator som visar datum och sista gången enheten anslöt, tog emot eller skickade ett meddelande. Den här egenskapen är så småningom konsekvent, men kan fördröjas upp till 5 till 10 minuter. Därför bör den inte användas i produktionsscenarier. |
Kommentar
Anslutningstillståndet kan bara representera IoT Hub-vyn för anslutningens status. Uppdateringar av det här tillståndet kan fördröjas, beroende på nätverksförhållanden och konfigurationer.
Kommentar
Enhets-SDK:erna stöder för närvarande inte användning av +
tecknen och #
i deviceId.
Egenskaper för modulidentitet
Modulidentiteter representeras som JSON-dokument med följande egenskaper:
Property | Alternativ | Description |
---|---|---|
deviceId | nödvändiga, skrivskyddade uppdateringar | En skiftlägeskänslig sträng (upp till 128 tecken lång) med 7-bitars alfanumeriska ASCII-tecken plus vissa specialtecken: - . + % _ # * ? ! ( ) , : = @ $ ' . |
moduleId | nödvändiga, skrivskyddade uppdateringar | En skiftlägeskänslig sträng (upp till 128 tecken lång) med 7-bitars alfanumeriska ASCII-tecken plus vissa specialtecken: - . + % _ # * ? ! ( ) , : = @ $ ' . |
generationId | obligatoriskt, skrivskyddat | En IoT Hub-genererad, skiftlägeskänslig sträng upp till 128 tecken lång. Det här värdet används för att särskilja enheter med samma deviceId när de har tagits bort och skapats på nytt. |
etag | obligatoriskt, skrivskyddat | En sträng som representerar en svag ETag för enhetsidentiteten enligt RFC7232. |
autentisering | valfri | Ett sammansatt objekt som innehåller autentiseringsinformation och säkerhetsmaterial. Mer information finns i autentiseringsmekanismen i REST API-dokumentationen. |
managedBy | valfri | Identifierar vem som hanterar den här modulen. Det här värdet är till exempel "IoT Edge" om edge-körningen äger den här modulen. |
cloudToDeviceMessageCount | skrivskyddad | Antalet moln-till-modul-meddelanden som för närvarande placeras i kö för att skickas till modulen. |
connectionState | skrivskyddad | Ett fält som anger anslutningsstatus: antingen Ansluten eller Frånkopplad. Det här fältet representerar IoT Hub-vyn för enhetens anslutningsstatus. Viktigt: Det här fältet bör endast användas i utvecklings-/felsökningssyfte. Anslutningstillståndet uppdateras endast för enheter som använder MQTT eller AMQP. Dessutom baseras den på ping på protokollnivå (MQTT-ping eller AMQP-ping) och kan ha en maximal fördröjning på bara 5 minuter. Av dessa skäl kan det finnas falska positiva identifieringar, till exempel frånkopplade enheter som rapporteras som anslutna. |
connectionStateUpdatedTime | skrivskyddad | En tidsindikator som visar datum och senaste gång anslutningstillståndet uppdaterades. |
lastActivityTime | skrivskyddad | En tidsindikator som visar datum och sista gången enheten anslöt, tog emot eller skickade ett meddelande. |
Kommentar
Enhets-SDK:erna stöder för närvarande inte användning av +
tecknen och #
i deviceId och moduleId.
Ytterligare referensmaterial
Andra referensartiklar i utvecklarguiden för IoT Hub är:
IoT Hub-slutpunkter beskriver de olika slutpunkter som varje IoT-hubb exponerar för körnings- och hanteringsåtgärder.
Begränsning och kvoter beskriver de kvoter och begränsningsbeteenden som gäller för IoT Hub-tjänsten.
Azure IoT-enhets- och tjänst-SDK:er visar de olika språk-SDK:er som du kan använda när du utvecklar både enhets- och tjänstappar som interagerar med IoT Hub.
IoT Hub-frågespråket beskriver det frågespråk som du kan använda för att hämta information från IoT Hub om dina enhetstvillingar och jobb.
IoT Hub MQTT-stöd ger mer information om IoT Hub-stöd för MQTT-protokollet.
Nästa steg
Nu när du har lärt dig hur du använder IoT Hub-identitetsregistret kan du vara intresserad av följande artiklar i utvecklarguiden för IoT Hub:
Information om hur du använder IoT Hub Device Provisioning-tjänsten för att aktivera nolltouch- och just-in-time-etablering finns i: