AWS IoT Core Conectando-se usando autenticação personalizada - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AWS IoT Core Conectando-se usando autenticação personalizada

Os dispositivos podem se conectar AWS IoT Core usando a autenticação personalizada com qualquer protocolo que AWS IoT Core ofereça suporte para mensagens de dispositivos. Para obter mais informações sobre protocolos de comunicação disponíveis, consulte Protocolos de comunicação do dispositivo.  Os dados de conexão transmitidos para a função do Lambda do autorizador dependem do protocolo usado. Para obter mais informações sobre como a função do Lambda do autorizador, consulte Definição de sua função do Lambda. As seções a seguir explicam como se conectar para autenticar usando cada protocolo compatível.

HTTPS

Os dispositivos que enviam dados AWS IoT Core usando o HTTPPublish API podem passar credenciais por meio de cabeçalhos de solicitação ou parâmetros de consulta em suas HTTP POST solicitações. Os dispositivos podem especificar um autorizador a ser invocado usando o cabeçalho x-amz-customauthorizer-name ou o parâmetro de consulta. Se você tiver a assinatura de token ativada no autorizador, será necessário transmitir token-key-name e x-amz-customauthorizer-signature nos cabeçalhos da solicitação ou nos parâmetros de consulta. Observe que o token-signature valor deve ser URL codificado em -quando usado JavaScript de dentro do navegador.

nota

O autorizador do cliente para o HTTPS protocolo só oferece suporte às operações de publicação. Para obter mais informações sobre o HTTPS protocolo, consulteProtocolos de comunicação do dispositivo.

Os exemplos de solicitações a seguir mostram como transmitir esses parâmetros nos cabeçalhos de solicitação e nos 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

Os dispositivos que se conectam AWS IoT Core usando uma MQTT conexão podem passar credenciais pelos password campos username e das MQTT mensagens. Opcionalmente, o valor username também pode conter uma string de consulta que transmite valores adicionais (incluindo token, assinatura e nome do autorizador) ao autorizador. Você poderá usar essa string de consulta caso queira usar um esquema de autenticação baseado em tokens em vez de valores username e password

nota

Os dados no campo de senha são codificados em base64 por. AWS IoT Core A sua função do Lambda deve decodificá-los.

O exemplo a seguir contém uma string username com parâmetros extras que especificam um token e uma assinatura. 

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

Para invocar um autorizador, os dispositivos que se conectam AWS IoT Core usando MQTT uma autenticação personalizada devem se conectar na porta 443. Eles também devem passar a TLS extensão Application Layer Protocol Negotiation (ALPN) com um valor de mqtt e a extensão Server Name Indication (SNI) com o nome do host de seu endpoint de AWS IoT Core dados. Para evitar possíveis erros, o valor de x-amz-customauthorizer-signature deve ser URL codificado. Também é altamente recomendável que os valores de x-amz-customauthorizer-name e token-key-name sejam URL codificados. Para obter mais informações sobre esses valores, consulte Protocolos de comunicação do dispositivo. O AWS IoT SDKs de dispositivos, SDKs móveis e AWS IoT cliente de dispositivo V2 pode configurar essas duas extensões. 

MQTTterminado WebSockets

Os dispositivos que se conectam AWS IoT Core usando MQTT over WebSockets podem transmitir credenciais de uma das duas maneiras a seguir.

  • Por meio de cabeçalhos de solicitação ou parâmetros de consulta na HTTP UPGRADE solicitação para estabelecer a WebSockets conexão.

  • Por meio dos password campos username e na MQTT CONNECT mensagem.

Se você passar as credenciais por meio da mensagem de MQTT conexão, as SNI TLS extensões ALPN e serão necessárias. Para obter mais informações sobre essas extensões, consulteMQTT. O exemplo a seguir demonstra como passar credenciais por meio da solicitação de HTTP upgrade.

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

Assinatura do token

É necessário assinar o token com a chave privada do par de chaves públicas/privadas usadas na chamada create-authorizer. Os exemplos a seguir mostram como criar a assinatura do token usando um comando UNIX -like e. JavaScript Eles usam o algoritmo de hash SHA -256 para codificar a assinatura.

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