Conectarse a AWS IoT Core mediante una autenticación personalizada - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Conectarse a AWS IoT Core mediante una autenticación personalizada

Los dispositivos se pueden conectar AWS IoT Core mediante una autenticación personalizada con cualquier protocolo AWS IoT Core compatible con la mensajería del dispositivo. Para obtener más información acerca de los protocolos de comunicación compatibles, consulte Protocolos de comunicación de dispositivos.  Los datos de conexión que se transfieren a la función de Lambda de su autorizador dependen del protocolo que utilice. Para obtener más información acerca de cómo crear la función de Lambda de su autorizador, consulte Definición de la función de Lambda. En las secciones siguientes se explica cómo conectarse para autenticarse mediante cada protocolo compatible.

HTTPS

Los dispositivos a los que se envían datos AWS IoT Core mediante la API de publicación HTTP pueden transferir las credenciales a través de los encabezados de las solicitudes o de los parámetros de consulta en sus solicitudes HTTP POST. Los dispositivos pueden especificar un autorizador para invocarlo mediante el encabezado x-amz-customauthorizer-name o el parámetro de consulta. Si tiene habilitada la firma por token en su autorizador, debe pasar token-key-name y x-amz-customauthorizer-signature en los encabezados de las solicitudes o en los parámetros de consulta. Tenga en cuenta que el token-signature valor debe estar codificado en una URL cuando se utilice JavaScript desde el navegador.

nota

El autorizador del cliente para el protocolo HTTPS solo admite operaciones de publicación. Para obtener más información acerca del protocolo HTTP, consulte Protocolos de comunicación de dispositivos.

Los siguientes ejemplos de solicitudes muestran cómo se transfieren estos parámetros tanto en los encabezados de las solicitudes como en los parámetros de consulta.

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

Los dispositivos que se conectan AWS IoT Core mediante una conexión MQTT pueden pasar las credenciales a través de los password campos username y de los mensajes MQTT. De forma opcional, el valor de username también puede contener una cadena de consulta que transfiere valores adicionales (como un token, una firma y el nombre del autorizador) a su autorizador. Puede utilizar esta cadena de consulta si desea utilizar un esquema de autenticación basado en símbolos en lugar de valores username y password

nota

Los datos del campo de contraseña están codificados en base64 mediante. AWS IoT Core Debe descodificarlos con la función de Lambda.

El siguiente ejemplo contiene una cadena username con parámetros adicionales que especifican un token y una firma. 

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

Para invocar un autorizador, los dispositivos que se conecten AWS IoT Core mediante MQTT y la autenticación personalizada deben conectarse al puerto 443. También deben pasar la extensión TLS de negociación de protocolos de capa de aplicación (ALPN) con un valor de mqtt y la extensión de indicación del nombre del servidor (SNI) con el nombre de host de su terminal de datos. AWS IoT Core Para evitar posibles errores, el valor de x-amz-customauthorizer-signature debe estar codificado como URL. También recomendamos encarecidamente que los valores de x-amz-customauthorizer-name y token-key-name estén codificados como URL. Para obtener más información acerca de estos valores, consulteProtocolos de comunicación de dispositivos. V2 AWS IoT SDK de dispositivo, SDK para dispositivos móviles y AWS IoT cliente de dispositivo puede configurar estas dos extensiones. 

MQTT ha terminado WebSockets

Los dispositivos que se conectan AWS IoT Core mediante MQTT Over WebSockets pueden transferir las credenciales de una de las dos maneras siguientes.

  • Mediante los encabezados de las solicitudes o los parámetros de consulta de la solicitud HTTP UPGRADE para establecer la WebSockets conexión.

  • A través de los campos username y password del mensaje MQTT CONNECT.

Si pasa las credenciales a través del mensaje de conexión de MQTT, se requieren las extensiones TLS ALPN y SNI. Para obtener más información, consulte MQTT. El siguiente ejemplo ilustra cómo pasar credenciales a través de la solicitud de actualización de 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

Firmar el token

Debe firmar el token con la clave privada del par de claves pública-privada que utilizó en la llamada a create-authorizer. Los siguientes ejemplos muestran cómo crear la firma simbólica mediante un comando similar a Unix y. JavaScript Utilizan el algoritmo hash SHA-256 para codificar 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')