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

Dispositivos que enviam dados AWS IoT Core usando a API HTTP Publish podem passar credenciais por meio de cabeçalhos de solicitação ou parâmetros de consulta em suas solicitações HTTP POST. 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 codificado em URL ao ser usado JavaScript de dentro do navegador.

nota

O autorizador do cliente para o protocolo HTTPS é compatível somente com operações de publicação. Para obter mais informações sobre o protocolo HTTP, consulte Protocolos 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 conexão MQTT podem passar credenciais pelos password campos username e das mensagens MQTT. 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 o MQTT e a autenticação personalizada devem se conectar na porta 443. Eles também devem passar a extensão TLS de negociação de protocolo de camada de aplicativo (ALPN) com um valor de mqtt e a extensão de indicação de nome de servidor (SNI) com o nome do host de seu endpoint de dados. AWS IoT Core Para evitar possíveis erros, o valor de x-amz-customauthorizer-signature deve ser codificado em URL. Também é altamente recomendável que os valores de x-amz-customauthorizer-name e token-key-name sejam codificados em URL. 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. 

Acabou o MQTT WebSockets

Os dispositivos que se conectam AWS IoT Core usando o 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 solicitação HTTP UPGRADE para estabelecer a WebSockets conexão.

  • Através dos campos username e password na mensagem do MQTT CONNECT.

Se você transmitir as credenciais pela mensagem de conexão do MQTT, as extensões TLS ALPN e SNI serão necessárias. Para obter mais informações sobre essas extensões, consulte MQTT. O exemplo a seguir demonstra como transmitir credenciais por meio da solicitação 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 semelhante ao Unix 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')