Connexion à l' AWS IoT Core aide de l'authentification personnalisée - AWS IoT Core

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connexion à l' AWS IoT Core aide de l'authentification personnalisée

Les appareils peuvent se connecter à AWS IoT Core l'aide d'une authentification personnalisée avec n'importe quel protocole prenant AWS IoT Core en charge la messagerie des appareils. Pour plus d'informations sur les protocoles de communication pris en charge, consultez Protocoles de communication des appareils.  Les données de connexion que vous transmettez à votre fonction Lambda d'autorisation dépendent du protocole que vous utilisez. Pour plus d'informations sur la création de votre fonction Lambda d'autorisation, consultez Définir votre fonction Lambda. Les sections suivantes expliquent comment se connecter pour s'authentifier à l'aide de chaque protocole pris en charge.

HTTPS

Les appareils qui envoient des données à AWS IoT Core l'aide de l'API HTTP Publish peuvent transmettre des informations d'identification par le biais d'en-têtes de requête ou de paramètres de requête dans leurs requêtes HTTP POST. Les appareils peuvent spécifier un mécanisme d'autorisation à invoquer à l'aide du paramètre d'en-tête x-amz-customauthorizer-name ou de requête. Si la signature de jetons est activée dans votre mécanisme d'autorisation, vous devez transmettre le token-key-name et x-amz-customauthorizer-signature dans les en-têtes ou paramètres de requête. Notez que la token-signature valeur doit être codée en URL lorsque vous l'utilisez JavaScript depuis le navigateur.

Note

Le mécanisme d'autorisation client pour le protocole HTTPS prend uniquement en charge les opérations de publication. Pour plus d'informations sur le protocole HTTPS, consultez Protocoles de communication des appareils.

Les exemples de requêtes suivants montrent comment transmettre ces paramètres dans les en-têtes et paramètres de requête.

//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

Les appareils qui se connectent à AWS IoT Core l'aide d'une connexion MQTT peuvent transmettre des informations d'identification via les password champs username et des messages MQTT. La valeur username peut éventuellement contenir une chaîne de requête qui transmet des valeurs supplémentaires (y compris un jeton, une signature et un nom du mécanisme d'autorisation) à votre mécanisme d'autorisation. Vous pouvez utiliser cette chaîne de requête si vous souhaitez utiliser un schéma d'authentification basé sur un jeton au lieu des valeurs password et username

Note

Les données du champ du mot de passe sont codées en base64 par. AWS IoT Core Votre fonction Lambda doit le décoder.

L'exemple suivant contient une chaîne username contenant des paramètres supplémentaires spécifiant un jeton et une signature. 

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

Pour appeler un autorisateur, les appareils qui se connectent à l'aide AWS IoT Core de MQTT et d'une authentification personnalisée doivent se connecter sur le port 443. Ils doivent également transmettre l'extension TLS ALPN (Application Layer Protocol Negotiation) avec une valeur égale à mqtt et l'extension SNI (Server Name Indication) avec le nom d'hôte de leur AWS IoT Core point de terminaison de données. Pour éviter des erreurs potentielles, la valeur de x-amz-customauthorizer-signature doit être codée en URL. Nous recommandons fortement que les valeurs de x-amz-customauthorizer-name et token-key-name soient codées en URL. Pour plus d'informations sur ces valeurs, consultez Protocoles de communication des appareils. Le AWS IoT SDK pour appareils, kits de développement logiciel mobiles et AWS IoT client pour appareils V2 peut configurer ces deux extensions. 

MQTT terminé WebSockets

Les appareils qui se connectent à AWS IoT Core l'aide de MQTT over WebSockets peuvent transmettre des informations d'identification de l'une des deux manières suivantes.

  • Via les en-têtes de requête ou les paramètres de requête contenus dans la demande HTTP UPGRADE pour établir la WebSockets connexion.

  • Via les champs username et password dans le message MQTT CONNECT.

Si vous transmettez les informations d'identification via le message de connexion MQTT, les extensions ALPN et SNI TLS sont requises. Pour plus d'informations sur ces extensions, consultez MQTT. L'exemple suivant montre comment transmettre les informations d'identification via la demande de mise à niveau 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

Signer le jeton

Vous devez signer le jeton avec la clé privée de la paire de clés publique-privée que vous avez utilisée lors de l'appel create-authorizer. Les exemples suivants montrent comment créer la signature du jeton à l'aide d'une commande de type Unix et. JavaScript Ils utilisent l'algorithme de hachage SHA-256 pour coder la signature.

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')