

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
<a name="custom-auth"></a>

 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](protocols.md).  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](custom-auth-lambda.md). In den folgenden Abschnitten wird erläutert, wie Sie eine Verbindung zur Authentifizierung mit jedem unterstützten Protokoll herstellen.

## HTTPS
<a name="custom-auth-http"></a>

Geräte, an die Daten AWS IoT Core mithilfe der [HTTP Publish API](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html) gesendet werden, 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 der `token-signature` Wert URL-codiert sein muss, wenn er vom Browser JavaScript aus verwendet wird.

**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](protocols.md).

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
<a name="custom-auth-mqtt"></a>

 Geräte, die über eine MQTT-Verbindung eine Verbindung herstellen, können Anmeldeinformationen über die `password` Felder `username` und AWS IoT Core von MQTT-Nachrichten weiterleiten. 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 und benutzerdefinierte Authentifizierung eine Verbindung herstellen, eine Verbindung über Port 443 herstellen. AWS IoT Core Sie müssen außerdem die TLS-Erweiterung Application Layer Protocol Negotiation (ALPN) mit dem Wert `mqtt` und die Erweiterung Server Name Indication (SNI) mit dem Hostnamen ihres Datenendpunkts übergeben. AWS IoT Core 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](protocols.md). Die V2 [AWS IoT Geräte SDKs - SDKs, Mobil- und AWS IoT Geräteclient](iot-sdks.md) kann diese beiden Erweiterungen konfigurieren. 

## MQTT über WebSockets
<a name="custom-auth-websockets"></a>

 Geräte, die AWS IoT Core über MQTT-Over eine Verbindung herstellen, WebSockets können Anmeldeinformationen auf eine der beiden folgenden Arten weitergeben. 
+ Über Anforderungsheader oder Abfrageparameter in der HTTP-UPGRADE-Anfrage, um die WebSockets Verbindung herzustellen.
+ Ü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](#custom-auth-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
<a name="custom-auth-token-signature"></a>

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 kodieren.

------
#### [ 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')
```

------