

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
<a name="custom-auth"></a>

 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](protocols.md).  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](custom-auth-lambda.md). Nelle sezioni seguenti viene illustrato come connettersi per l'autenticazione utilizzando ogni protocollo supportato.

## HTTPS
<a name="custom-auth-http"></a>

I dispositivi che inviano dati AWS IoT Core tramite l'[API HTTP Publish](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html) possono passare le credenziali tramite le intestazioni di richiesta o i parametri di query nelle richieste HTTP POST. 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 come URL quando viene utilizzato JavaScript dall'interno del browser.

**Nota**  
La funzione delle autorizzazioni del cliente per il protocollo HTTPS supporta solo le operazioni di pubblicazione. Per ulteriori informazioni sul protocollo HTTP, consultare [Protocolli di dispositivo di comunicazione](protocols.md).

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
<a name="custom-auth-mqtt"></a>

 I dispositivi a cui si connettono AWS IoT Core tramite una connessione MQTT possono trasmettere le credenziali attraverso i campi `username` e `password` dei messaggi MQTT. 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 che si connettono tramite MQTT e l' AWS IoT Core autenticazione personalizzata devono connettersi alla porta 443. Devono inoltre passare l'estensione TLS Application Layer Protocol Negotiation (ALPN) con un valore di `mqtt` e l'estensione Server Name Indication (SNI) con il nome host del loro endpoint di dati. AWS IoT Core Per evitare potenziali errori, il valore per `x-amz-customauthorizer-signature` deve essere codificato in formato URL. Inoltre, è raccomandabile che anche i valori di `x-amz-customauthorizer-name` e `token-key-name` siano codificati nello stesso formato. Per ulteriori informazioni su questi valori, consulta [Protocolli di dispositivo di comunicazione](protocols.md). [AWS IoT Client per dispositivi SDKs SDKs, dispositivi mobili e AWS IoT dispositivi mobili](iot-sdks.md) V2 può configurare entrambe queste estensioni. 

## MQTT over WebSockets
<a name="custom-auth-websockets"></a>

 I dispositivi che si connettono AWS IoT Core tramite MQTT over WebSockets possono passare le credenziali in uno dei due modi seguenti. 
+ Tramite le intestazioni di richiesta o i parametri di query nella richiesta HTTP UPGRADE per stabilire la connessione. WebSockets 
+ Attraverso i campi `username` e `password` nel messaggio MQTT CONNECT.

 Se si passano le credenziali tramite il messaggio di connessione MQTT, sono necessarie le estensioni ALPN e SNI TLS. Per ulteriori informazioni su queste estensioni, consulta [MQTT](#custom-auth-mqtt). Nell'esempio seguente viene illustrato come trasferire le credenziali tramite la richiesta di aggiornamento HTTP. 

```
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
<a name="custom-auth-token-signature"></a>

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 simile a Unix e. JavaScript Utilizzano 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')
```

------