Connessione a AWS IoT Core tramite autenticazione personalizzata - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connessione a AWS IoT Core tramite autenticazione personalizzata

I dispositivi possono connettersi AWS IoT Core utilizzando l'autenticazione personalizzata con qualsiasi protocollo che AWS IoT Core supporti la messaggistica dei dispositivi. Per ulteriori informazioni sui protocolli di comunicazione supportati, consulta Protocolli di dispositivo di comunicazione.  I dati di connessione che passi all'autorizzatore della funzione Lambda dipendono dal protocollo utilizzato. Per ulteriori informazioni sulla creazione dell'autorizzatore della funzione Lambda, consulta Scrittura della funzione Lambda. Nelle sezioni seguenti viene illustrato come connettersi per l'autenticazione utilizzando ogni protocollo supportato.

HTTPS

I dispositivi a cui inviano dati AWS IoT Core utilizzando HTTPPublish API possono passare le credenziali tramite le intestazioni di richiesta o i parametri di query nelle HTTP POST richieste. I dispositivi possono specificare un'autorizzatore da richiamare utilizzando l'intestazione x-amz-customauthorizer-name o i parametri di query. Se nella tua autorizzazione è abilitata la firma dei token, devi passare token-key-name e x-amz-customauthorizer-signature nelle intestazioni di richiesta o nei parametri di query. Tieni presente che il token-signature valore deve essere codificato URL con -codifica quando viene utilizzato JavaScript dall'interno del browser.

Nota

L'autorizzazione del cliente per il HTTPS protocollo supporta solo le operazioni di pubblicazione. Per ulteriori informazioni sul HTTPS protocollo, vedereProtocolli di dispositivo di comunicazione.

Le seguenti richieste di esempio mostrano come passare questi parametri sia nelle intestazioni di richiesta che nei parametri di query.

//Passing credentials via headers POST /topics/topic?qos=qos HTTP/1.1 Host: your-endpoint  x-amz-customauthorizer-signature: token-signature token-key-name: token-value  x-amz-customauthorizer-name: authorizer-name //Passing credentials via query parameters POST /topics/topic?qos=qos&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value HTTP/1.1

MQTT

I dispositivi a cui si connettono AWS IoT Core tramite una MQTT connessione possono trasmettere le credenziali attraverso i password campi username e dei MQTT messaggi. Il valore username può facoltativamente contenere una stringa di query che invia valori aggiuntivi (tra cui un token, una firma e il nome di un autorizzatore) al tuo autorizzatore. Puoi utilizzare questa stringa di query se desideri utilizzare uno schema di autenticazione basato su token anziché i valori username e password

Nota

I dati nel campo della password sono codificati in base64 da. AWS IoT Core Devono essere decodificati dalla funzione Lambda.

L'esempio seguente contiene una stringa username che contiene parametri aggiuntivi che specificano un token e una firma. 

username?x-amz-customauthorizer-name=authorizer-name&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value

Per richiamare un autorizzatore, i dispositivi a cui si connettono utilizzando un'autenticazione personalizzata AWS IoT Core devono connettersi alla porta MQTT 443. Devono inoltre passare l'estensione Application Layer Protocol Negotiation (ALPN) con un valore di mqtt e l'TLSestensione Server Name Indication (SNI) con il nome host del loro endpoint di dati. AWS IoT Core Per evitare potenziali errori, è x-amz-customauthorizer-signature necessario codificare il valore diURL. Consigliamo inoltre vivamente di URL codificare i valori token-key-name di x-amz-customauthorizer-name e. Per ulteriori informazioni su questi valori, consulta Protocolli di dispositivo di comunicazione. AWS IoT SDK per dispositivi, SDK per dispositivi mobili e AWS IoT client per dispositivi V2 può configurare entrambe queste estensioni. 

MQTTsopra WebSockets

I dispositivi che si connettono AWS IoT Core utilizzando MQTT over WebSockets possono passare le credenziali in uno dei due modi seguenti.

  • Tramite le intestazioni di richiesta o i parametri di query nella HTTP UPGRADE richiesta per stabilire la WebSockets connessione.

  • Tramite i password campi username e del MQTT CONNECT messaggio.

Se si passano le credenziali tramite il messaggio di MQTT connessione, le SNI TLS estensioni ALPN and sono obbligatorie. Per ulteriori informazioni su queste estensioni, consultaMQTT. L'esempio seguente mostra come passare le credenziali tramite la richiesta di HTTP aggiornamento.

GET /mqtt HTTP/1.1 Host: your-endpoint Upgrade: WebSocket Connection: Upgrade x-amz-customauthorizer-signature: token-signature token-key-name: token-value  sec-WebSocket-Key: any random base64 value sec-websocket-protocol: mqtt sec-WebSocket-Version: websocket version

Firma del token

Devi firmare il token con la chiave privata della coppia di chiavi pubblica-privata che hai utilizzato nella chiamata create-authorizer. Gli esempi seguenti mostrano come creare la firma del token utilizzando un comando UNIX -like e. JavaScript Usano l'algoritmo hash SHA -256 per codificare la firma.

Command line
echo -n TOKEN_VALUE | openssl dgst -sha256 -sign PEM encoded RSA private key | openssl base64
JavaScript
const crypto = require('crypto') const key = "PEM encoded RSA private key" const k = crypto.createPrivateKey(key) let sign = crypto.createSign('SHA256') sign.write(t) sign.end() const s = sign.sign(k, 'base64')