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 función HTTPPublicar API pueden pasar las credenciales a través de los encabezados de las solicitudes o de los parámetros de consulta de sus HTTP POST solicitudes. 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 URL codificado en «s» cuando se utilice JavaScript desde el navegador.

nota

El autorizador del HTTPS protocolo por parte del cliente solo admite operaciones de publicación. Para obtener más información sobre el HTTPS protocolo, consulteProtocolos 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 MQTT conexión pueden pasar credenciales a través de los password campos username y de los MQTT mensajes. 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 por. 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 una autenticación personalizada deben conectarse al puerto 443. También deben pasar la extensión Application Layer Protocol Negotiation (ALPN) con un valor de mqtt y la TLS extensión de indicación del nombre del servidor (SNI) con el nombre de host de su punto final de AWS IoT Core datos. Para evitar posibles errores, el valor de x-amz-customauthorizer-signature debe estar URL codificado. También recomendamos encarecidamente que los valores de x-amz-customauthorizer-name y token-key-name estén URL codificados. 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. 

MQTTmás 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 encabezados de solicitud o parámetros de consulta en la HTTP UPGRADE solicitud para establecer la WebSockets conexión.

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

Si pasa las credenciales a través del mensaje de MQTT conexión, las SNI TLS extensiones ALPN y son obligatorias. Para obtener más información sobre estas extensiones, consulteMQTT. El siguiente ejemplo muestra cómo pasar las credenciales a través de la solicitud de HTTP actualización.

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. En los siguientes ejemplos se muestra cómo crear la firma del token mediante un UNIX comando like 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')