Comprendere il registro delle identità nell'hub IoT

A ogni hub IoT è associato un registro delle identità in cui sono archiviate le informazioni sui dispositivi e i moduli a cui è consentito connettersi all'hub IoT. Prima che un dispositivo o modulo possa connettersi a un hub IoT, è necessario che sia presente una voce relativa al dispositivo o al modulo nel registro delle identità dell'hub IoT. Un dispositivo o un modulo deve autenticarsi anche con l'hub IoT in base alle credenziali archiviate nel registro delle identità.

L'ID dispositivo o modulo archiviato nel registro delle identità rispetta la distinzione tra maiuscole e minuscole.

A livello generale, il registro delle identità è una raccolta di risorse relative alle identità dei dispositivi e dei moduli che supportano REST. Quando si aggiunge una voce nel registro delle identità, l'hub IoT crea un set di risorse per dispositivo, ad esempio una coda contenente messaggi da cloud a dispositivo in elaborazione.

Usare il registro delle identità quando è necessario:

  • Eseguire il provisioning dei dispositivi o dei moduli che si connettono all'hub IoT.
  • Controllare l'accesso per dispositivo/per modulo agli endpoint collegati al dispositivo o modulo dell'hub.

Operazioni del registro delle identità

Il registro delle identità dell'hub IoT espone le operazioni seguenti:

  • Creazione dell'identità del dispositivo o del modulo
  • Aggiornamento dell'identità del dispositivo o del modulo
  • Recupero dell'identità del dispositivo o del modulo tramite ID
  • Eliminazione dell'identità del dispositivo o del modulo
  • Elencare al massimo 1000 identità
  • Esportare le identità del dispositivo in Archiviazione BLOB di Azure
  • Importare le identità del dispositivo da Archiviazione BLOB di Azure

Tutte queste operazioni possono usare la concorrenza ottimistica, come specificato in RFC7232.

Importante

L'unico modo per recuperare tutte le identità nel registro delle identità di un hub IoT consiste nell'usare la funzionalità Esporta.

Un registro delle identità di un hub IoT:

  • Non contiene metadati dell'applicazione.

Importante

Usare il registro delle identità solo per le operazioni di gestione e provisioning dei dispositivi. Le operazioni a velocità effettiva elevata in fase di esecuzione non devono dipendere dall'esecuzione di operazioni nel registro delle identità. Ad esempio, la verifica dello stato di connessione di un dispositivo prima dell'invio di un comando non è uno schema supportato. Assicurarsi di controllare le tariffe di limitazione per il registro delle identità.

Nota

La disponibilità di un'identità del dispositivo o del modulo dopo la creazione può richiedere alcuni secondi. get Ripetere l'operazione di identità del dispositivo o del modulo in caso di errori.

Disabilitare i dispositivi

È possibile disabilitare i dispositivi aggiornando la proprietà di stato di un'identità nel registro delle identità. Questa proprietà viene in genere usata in due scenari:

  • Durante un processo di orchestrazione di provisioning. Per altre informazioni, vedere Provisioning di dispositivi.

  • Se si ritiene che un dispositivo sia compromesso o sia diventato non autorizzato per qualsiasi motivo.

    Importante

    hub IoT non controlla gli elenchi di revoche di certificati durante l'autenticazione dei dispositivi con l'autenticazione basata su certificato. Se si dispone di un dispositivo che deve essere bloccato dalla connessione a hub IoT a causa di un certificato potenzialmente compromesso, è necessario disabilitare il dispositivo nel registro delle identità.

Questa funzionalità non è disponibile per i moduli.

Per altre informazioni, vedere Disabilitare o eliminare un dispositivo in un hub IoT.

Importare ed esportare le identità dei dispositivi

Usare operazioni asincrone sull'endpoint del provider di risorse dell'hub IoT per esportare in blocco le identità dei dispositivi da un registro delle identità di un hub IoT. Le esportazioni sono processi a esecuzione prolungata che usano un contenitore BLOB specificato dal cliente per salvare i dati relativi alle identità dei dispositivi letti dal registro delle identità.

Usare operazioni asincrone sull'endpoint del provider di risorse dell'hub IoT per importare in blocco le identità dei dispositivi in un registro delle identità di un hub IoT. Le importazioni sono processi a esecuzione prolungata che usano un contenitore BLOB specificato dal cliente per scrivere i dati relativi alle identità nel registro delle identità.

Per altre informazioni sulle API di importazione e di esportazione, vedere IoT Hub resource provider REST APIs (API REST del provider di risorse dell'hub IoT). Per altre informazioni sull'esecuzione dei processi di importazione ed esportazione, vedere Gestione in blocco delle identità dei dispositivi dell'hub IoT.

Le identità dei dispositivi possono anche essere esportate e importate da un hub IoT usando l'API del servizio tramite l'API REST o uno degli SDK del servizio hub IoT.

Provisioning di dispositivi

I dati del dispositivo archiviati da una soluzione IoT dipendono dai requisiti specifici di tale soluzione. Tuttavia, come minimo, una soluzione deve archiviare identità di dispositivo e chiavi di autenticazione. L'hub IoT di Azure include un registro delle identità in grado di archiviare i valori per ogni dispositivo, ad esempio ID, chiavi di autenticazione e codici di stato. Una soluzione può usare altri servizi di Azure, ad esempio archiviazione tabelle, archiviazione BLOB o Azure Cosmos DB per archiviare altri dati del dispositivo.

Provisioning di dispositivi è il processo di aggiunta dei dati iniziali dei dispositivi agli archivi nella soluzione. Per abilitare un nuovo dispositivo per la connessione all'hub è necessario aggiungere un ID dispositivo e le relative chiavi al registro delle identità dell'hub IoT. Come parte del processo di provisioning, può essere necessario inizializzare i dati specifici del dispositivo in altri archivi di soluzioni. Inoltre, è possibile utilizzare il servizio Device Provisioning dell'hub IoT di Azure per abilitare il provisioning automatico JIT per uno o più hub IoT senza la necessità dell'intervento umano. Per altre informazioni, vedere la documentazione di servizio per il provisioning.

Notifiche per il ciclo di vita di dispositivi e moduli

hub IoT possibile inviare notifiche alla soluzione IoT quando viene creata o eliminata un'identità del dispositivo inviando notifiche del ciclo di vita. A tale scopo, la soluzione IoT deve creare una route e impostare l'origine dati uguale a DeviceLifecycleEvents. Per impostazione predefinita, non vengono inviate notifiche del ciclo di vita, il che significa che queste route non sono preesistenti. Creando una route con origine dati uguale a DeviceLifecycleEvents, gli eventi del ciclo di vita vengono inviati sia per le identità del dispositivo che per le identità dei moduli; Tuttavia, il contenuto del messaggio varia a seconda che gli eventi vengano generati per identità del modulo o identità del dispositivo. Si noti che per i moduli di IoT Edge, il flusso di creazione dell'identità del modulo è diverso rispetto ad altri moduli, di conseguenza per i moduli di IoT Edge la notifica di creazione viene inviata solo se è in esecuzione la corrispondente IoT Edge Dispositivo per l'identità del modulo IoT Edge aggiornata. Per tutti gli altri moduli, le notifiche del ciclo di vita vengono inviate ogni volta che l'identità del modulo viene aggiornata sul lato hub IoT. Per altre informazioni sulle proprietà e sul corpo restituiti nel messaggio di notifica, vedere Schemi di eventi non di telemetria.

Proprietà delle identità dei dispositivi

Le identità dei dispositivi vengono rappresentate da documenti JSON con le proprietà indicate di seguito.

Proprietà Opzioni Descrizione
deviceId Obbligatoria, di sola lettura negli aggiornamenti Stringa con distinzione tra maiuscole/minuscole (lunghezza massima 128 caratteri) con caratteri alfanumerici ASCII a 7 bit più alcuni caratteri speciali: - . % _ * ? ! ( ) , : = @ $ '. I caratteri speciali: + # non sono supportati.
generationId Obbligatoria, di sola lettura Stringa con distinzione tra maiuscole/minuscole generata dall'hub IoT con lunghezza massima di 128 caratteri. Tale valore viene usato per distinguere i dispositivi con la stessa proprietà deviceId in caso di eliminazione e nuova creazione.
etag Obbligatoria, di sola lettura Stringa che rappresenta un ETag debole per l'identità del dispositivo, in base a RFC7232.
autenticazione facoltative Oggetto composito contenente le informazioni di autenticazione e i materiali di sicurezza. Per altre informazioni, vedere Meccanismo di autenticazione nella documentazione dell'API REST.
capabilities facoltative Set di funzionalità del dispositivo. Ad esempio, se il dispositivo è un dispositivo perimetrale o meno. Per altre informazioni, vedere Funzionalità del dispositivo nella documentazione dell'API REST.
deviceScope facoltative Ambito del dispositivo. Nei dispositivi perimetrali, generati automaticamente e non modificabili. Deprecato nei dispositivi non perimetrali. Tuttavia, nei dispositivi figlio (foglia) impostare questa proprietà sullo stesso valore della proprietà parentScopes ( deviceScope del dispositivo padre) per garantire la compatibilità con le versioni precedenti dell'API. Per altre informazioni, vedere IoT Edge come gateway: Relazioni padre e figlio.
parentScopes facoltative Ambito dell'elemento padre diretto di un dispositivo figlio (il valore della proprietà deviceScope del dispositivo padre). Nei dispositivi perimetrali il valore è vuoto se il dispositivo non ha un elemento padre. Nei dispositivi non perimetrali la proprietà non è presente se il dispositivo non ha un elemento padre. Per altre informazioni, vedere IoT Edge come gateway: Relazioni padre e figlio.
status necessario Indicatore di accesso. Può essere Enabled o Disabled. Se è Enabled, il dispositivo sarà autorizzato alla connessione. Se Disabilitato, questo dispositivo non può accedere ad alcun endpoint rivolto al dispositivo.
statusReason facoltative Stringa con 128 caratteri di lunghezza che memorizza il motivo dello stato dell'identità del dispositivo. Sono consentiti tutti i caratteri UTF-8.
statusUpdateTime Sola lettura Indicatore temporale che mostra la data e l'ora dell'ultimo aggiornamento dello stato.
connectionState Sola lettura Campo indicante lo stato della connessione: Connected o Disconnected. Questo campo rappresenta la visualizzazione Hub IoT dello stato di connessione del dispositivo. Importante: questo campo deve essere usato solo a scopo di sviluppo/debug. Lo stato di connessione viene aggiornato solo per i dispositivi che usano MQTT o AMQP. Inoltre, si basa su ping a livello di protocollo (ping MQTT o ping AMQP) e può avere un ritardo massimo di soli 5 minuti. Per questi motivi, possono esserci falsi positivi, ad esempio i dispositivi disconnessi segnalati come connessi.
connectionStateUpdatedTime Sola lettura Indicatore temporale che mostra la data e l'ora dell'ultimo aggiornamento dello stato della connessione.
lastActivityTime Sola lettura Indicatore temporale che mostra la data e l'ora in cui il dispositivo si è connesso oppure ha ricevuto o inviato un messaggio per l'ultima volta. Questa proprietà è infine coerente, ma può essere ritardata fino a 5-10 minuti. Per questo motivo, non deve essere usato negli scenari di produzione.

Nota

Lo stato della connessione può rappresentare solo la visualizzazione Hub IoT dello stato della connessione. Gli aggiornamenti dello stato possono essere ritardati a seconda delle condizioni e delle configurazioni della rete.

Nota

Attualmente gli SDK del dispositivo non supportano l'uso dei + caratteri e # nel deviceId.

Proprietà delle identità dei moduli

Le identità dei moduli vengono rappresentate da documenti JSON con le proprietà seguenti:

Proprietà Opzioni Descrizione
deviceId Obbligatoria, di sola lettura negli aggiornamenti Stringa con distinzione tra maiuscole/minuscole (lunghezza massima 128 caratteri) con caratteri alfanumerici ASCII a 7 bit più alcuni caratteri speciali: - . + % _ # * ? ! ( ) , : = @ $ '.
moduleId Obbligatoria, di sola lettura negli aggiornamenti Stringa con distinzione tra maiuscole/minuscole (lunghezza massima 128 caratteri) con caratteri alfanumerici ASCII a 7 bit più alcuni caratteri speciali: - . + % _ # * ? ! ( ) , : = @ $ '.
generationId Obbligatoria, di sola lettura Stringa con distinzione tra maiuscole/minuscole generata dall'hub IoT con lunghezza massima di 128 caratteri. Questo valore viene usato per distinguere i dispositivi con lo stesso deviceId, quando sono stati eliminati e ricreati.
etag Obbligatoria, di sola lettura Stringa che rappresenta un ETag debole per l'identità del dispositivo, in base a RFC7232.
autenticazione facoltative Oggetto composito contenente le informazioni di autenticazione e i materiali di sicurezza. Per altre informazioni, vedere Meccanismo di autenticazione nella documentazione dell'API REST.
managedBy facoltative Identifica chi gestisce questo modulo. Ad esempio, questo valore è "IoT Edge" se il runtime perimetrale è proprietario di questo modulo.
cloudToDeviceMessageCount Sola lettura Numero di messaggi da cloud a modulo attualmente in coda da inviare al modulo.
connectionState Sola lettura Campo indicante lo stato della connessione: Connected o Disconnected. Questo campo rappresenta la visualizzazione Hub IoT dello stato di connessione del dispositivo. Importante: questo campo deve essere usato solo a scopo di sviluppo/debug. Lo stato di connessione viene aggiornato solo per i dispositivi che usano MQTT o AMQP. Inoltre, si basa su ping a livello di protocollo (ping MQTT o ping AMQP) e può avere un ritardo massimo di soli 5 minuti. Per questi motivi, possono esserci falsi positivi, ad esempio i dispositivi disconnessi segnalati come connessi.
connectionStateUpdatedTime Sola lettura Indicatore temporale che mostra la data e l'ora dell'ultimo aggiornamento dello stato della connessione.
lastActivityTime Sola lettura Indicatore temporale che mostra la data e l'ora in cui il dispositivo si è connesso oppure ha ricevuto o inviato un messaggio per l'ultima volta.

Nota

Attualmente gli SDK del dispositivo non supportano l'uso dei + caratteri e # nel deviceId e moduleId.

Materiale di riferimento

Altri articoli di riferimento nella guida per sviluppatori di hub IoT includono:

Passaggi successivi

Ora che si è appreso come usare il registro delle identità di hub IoT, è possibile che si sia interessati agli articoli della guida per gli sviluppatori di hub IoT seguenti:

Per analizzare l'uso del servizio Device Provisioning dell'hub IoT per abilitare il provisioning automatico senza intervento umano, vedere: