Mithilfe der benutzerdefinierten Authentifizierung AWS IoT Core wird eine Verbindung hergestellt - AWS IoT Core

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Mithilfe der benutzerdefinierten Authentifizierung AWS IoT Core wird eine Verbindung hergestellt

Geräte können AWS IoT Core mithilfe der benutzerdefinierten Authentifizierung mit jedem Protokoll, das Geräte-Messaging AWS IoT Core unterstützt, eine Verbindung herstellen. Weitere Informationen zu unterstützten Kommunikationsprotokollen finden Sie unter Gerätekommunikationsprotokolle.  Die Verbindungsdaten, die Sie an die Lambda-Funktion Ihres Genehmigers übergeben, hängen vom verwendeten Protokoll ab. Weitere Informationen zum Erstellen der Lambda-Funktion Ihres Genehmigers finden Sie unter Definieren Ihrer Lambda-Funktion. In den folgenden Abschnitten wird erläutert, wie Sie eine Verbindung zur Authentifizierung mit jedem unterstützten Protokoll herstellen.

HTTPS

Geräte, an die mithilfe AWS IoT Core von HTTPPublish Daten gesendet werden, API können Anmeldeinformationen entweder über Anforderungsheader oder Abfrageparameter in ihren HTTP POST Anfragen weitergeben. Geräte können mithilfe des Header- oder Abfrageparameters x-amz-customauthorizer-name einen aufzurufenden Genehmiger angeben. Wenn Sie die Tokensignatur in Ihrem Genehmiger aktiviert haben, müssen Sie den token-key-name und die x-amz-customauthorizer-signature entweder in den Anforderungsheadern oder Abfrageparametern übergeben. Beachten Sie, dass der token-signature Wert URL -kodiert sein muss, wenn er vom Browser JavaScript aus verwendet wird.

Anmerkung

Der Kundenautorisierer für das HTTPS Protokoll unterstützt nur Veröffentlichungsvorgänge. Weitere Informationen zum HTTPS Protokoll finden Sie unterGerätekommunikationsprotokolle.

Die folgenden Beispielanforderungen zeigen, wie Sie diese Parameter sowohl in Anforderungsheadern als auch in Abfrageparametern übergeben.

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

Geräte, die AWS IoT Core über eine MQTT Verbindung eine Verbindung herstellen, können Anmeldeinformationen über die password MQTT Nachrichtenfelder username und weitergeben. Der Wert username kann optional auch eine Abfragezeichenfolge enthalten, die zusätzliche Werte (einschließlich eines Tokens, einer Signatur und eines Genehmigernamens) an Ihren Genehmiger übergibt. Sie können diese Abfragezeichenfolge verwenden, wenn Sie anstelle der Werte username und password ein tokenbasiertes Authentifizierungsschema verwenden möchten. 

Anmerkung

Die Daten im Passwortfeld sind Base64-codiert von. AWS IoT Core Ihre Lambda-Funktion muss sie dekodieren.

Das folgende Beispiel enthält eine username-Zeichenfolge mit zusätzlichen Parametern, die ein Token und eine Signatur angeben. 

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

Um einen Authorizer aufzurufen, müssen Geräte, die über MQTT eine benutzerdefinierte Authentifizierung eine Verbindung herstellen, eine Verbindung über Port 443 herstellen. AWS IoT Core Sie müssen außerdem die Erweiterung Application Layer Protocol Negotiation (ALPN) mit dem Wert mqtt und die TLS Erweiterung Server Name Indication (SNI) mit dem Hostnamen ihres AWS IoT Core Datenendpunkts übergeben. Um mögliche Fehler zu vermeiden, x-amz-customauthorizer-signature sollte der Wert für URL codiert werden. Wir empfehlen außerdem dringend, die Werte von x-amz-customauthorizer-name und token-key-name zu URL codieren. Weitere Informationen zu diesen Werten finden Sie unter Gerätekommunikationsprotokolle. Die V2 AWS IoT Geräte-SDKs , Mobile SDKs und Geräte-Client AWS IoT kann diese beiden Erweiterungen konfigurieren. 

MQTTüber WebSockets

Geräte, die AWS IoT Core über MQTT Over eine Verbindung herstellen, WebSockets können Anmeldeinformationen auf eine der beiden folgenden Arten weitergeben.

  • Durch Anforderungsheader oder Abfrageparameter in der HTTP UPGRADE Anfrage zum Herstellen der WebSockets Verbindung.

  • Durch die password Felder username und in der MQTT CONNECT Nachricht.

Wenn Sie Anmeldeinformationen über die MQTT Verbindungsnachricht weitergeben, sind die SNI TLS Erweiterungen ALPN und erforderlich. Weitere Informationen zu diesen Erweiterungen finden Sie unterMQTT. Das folgende Beispiel zeigt, wie Anmeldeinformationen über die HTTP Upgrade-Anfrage übergeben werden.

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

Signieren des Tokens

Sie müssen das Token mit dem privaten Schlüssel des Paars aus öffentlichem und privatem Schlüssel signieren, das Sie im create-authorizer-Aufruf verwendet haben. Die folgenden Beispiele zeigen, wie die Tokensignatur mithilfe eines UNIX ähnlichen Befehls und erstellt wird JavaScript. Sie verwenden den SHA -256-Hash-Algorithmus, um die Signatur zu codieren.

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