View a markdown version of this page

Verbindung herstellen mit AWS IoT Core mithilfe einer benutzerdefinierten Authentifizierung - 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.

Verbindung herstellen mit AWS IoT Core mithilfe einer benutzerdefinierten Authentifizierung

Geräte können eine Verbindung herstellen mit AWS IoT Core durch die Verwendung einer benutzerdefinierten Authentifizierung mit einem beliebigen Protokoll AWS IoT Core unterstützt Gerätenachrichten. 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, die Daten senden an AWS IoT Core mit dem HTTP Publish API können Anmeldeinformationen entweder über Anforderungsheader oder Abfrageparameter in ihren HTTP-POST-Anfragen übergeben. 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 token-signature Wert muss sein URL-encoded bei der Verwendung JavaScript aus dem Browser heraus.

Anmerkung

Der Kundengenehmiger für das HTTPS-Protokoll unterstützt nur Veröffentlichungsvorgänge. Weitere Informationen über das HTTP-Protokoll finden Sie unter Gerä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 eine Verbindung herstellen zu AWS IoT Core durch die Verwendung einer MQTT-Verbindung können Anmeldeinformationen über den username und password Felder von MQTT-Nachrichten. 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-kodiert 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, stellen Geräte eine Verbindung her AWS IoT Core mithilfe von MQTT und benutzerdefinierter Authentifizierung muss eine Verbindung über Port 443 hergestellt werden. Sie müssen außerdem die TLS-Erweiterung Application Layer Protocol Negotiation (ALPN) mit dem Wert von übergeben mqtt und die Server Name Indication (SNI) -Erweiterung mit dem Hostnamen ihrer AWS IoT Core Datenendpunkt. Der Wert x-amz-customauthorizer-signature sollte URL-kodiert sein, um Fehler zu vermeiden. Wir empfehlen außerdem dringend, dass die Werte x-amz-customauthorizer-name und token-key-name URL-kodiert sind. Weitere Informationen zu diesen Werten finden Sie unter Gerätekommunikationsprotokolle. Die V2 AWS IoT Geräte-SDKs, SDKs für Mobilgeräte und AWS IoT Geräte-Client kann diese beiden Erweiterungen konfigurieren. 

MQTT über WebSockets

Geräte, die eine Verbindung herstellen mit AWS IoT Core durch die Verwendung von MQTT über WebSockets kann Anmeldeinformationen auf eine der beiden folgenden Arten weitergeben.

  • Mithilfe von Anforderungsheadern oder Abfrageparametern in der HTTP-UPGRADE-Anfrage zur Einrichtung der WebSockets Verbindung.

  • Über die Felder username und password in der MQTT-CONNECT-Nachricht.

Wenn Sie Anmeldeinformationen über die MQTT-Connect-Nachricht weitergeben, sind die TLS-Erweiterungen ALPN und SNI erforderlich. Weitere Informationen zu diesen Erweiterungen finden Sie unter MQTT. Das folgende Beispiel zeigt, wie Sie Anmeldeinformationen über die HTTP-Upgrade-Anforderung übergeben.

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 Sie die Token-Signatur mithilfe von erstellen UNIX-like Befehl und JavaScript. Sie benutzen die SHA-256 Hash-Algorithmus zum Kodieren der Signatur.

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