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 auxquels des données sont envoyées à AWS IoT Core l'aide de la fonction de HTTPpublication API peuvent transmettre des informations d'identification par le biais d'en-têtes de demande ou de paramètres de requête dans leurs HTTP POST demandes. 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 URL codée lors JavaScript de l'utilisation depuis le navigateur.

Note

L'autorisateur client pour le HTTPS protocole prend uniquement en charge les opérations de publication. Pour plus d'informations sur le HTTPS protocole, consultezProtocoles 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 MQTT connexion peuvent transmettre des informations d'identification via les password champs username et des MQTT messages. 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 à AWS IoT Core l'aide MQTT d'une authentification personnalisée doivent se connecter sur le port 443. Ils doivent également transmettre l'extension Application Layer Protocol Negotiation (ALPN) avec la valeur de mqtt et l'TLSextension Server Name Indication (SNI) avec le nom d'hôte de leur point de terminaison de AWS IoT Core données. Pour éviter d'éventuelles erreurs, la valeur de x-amz-customauthorizer-signature doit être URL codée. Nous recommandons également vivement que les valeurs de x-amz-customauthorizer-name et token-key-name soient URL codées. 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. 

MQTTterminé WebSockets

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

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

  • À travers les password champs username et du MQTT CONNECT message.

Si vous transmettez des informations d'identification par le biais du message de MQTT connexion, les SNI TLS extensions ALPN et sont requises. Pour plus d'informations sur ces extensions, consultezMQTT. L'exemple suivant montre comment transmettre des informations d'identification par le biais de la demande de HTTP mise à niveau.

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 UNIX like et JavaScript. Ils utilisent l'algorithme de hachage SHA -256 pour encoder 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')