

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.

# Verwendung von PKCE in Autorisierungscode-Zuschüssen
<a name="using-pkce-in-authorization-code"></a>

Amazon Cognito unterstützt die Proof Key for Code Exchange (PKCE) -Authentifizierung bei der Gewährung von Autorisierungscodes. PKCE ist eine Erweiterung der OAuth 2.0-Autorisierungscode-Gewährung für öffentliche Kunden. PKCE schützt vor der Rücknahme abgefangener Autorisierungscodes.

## So verwendet Amazon Cognito PKCE
<a name="how-pkce-works"></a>

Um die Authentifizierung mit PKCE zu starten, muss Ihre Anwendung einen eindeutigen Zeichenkettenwert generieren. Diese Zeichenfolge ist der Code Verifier, ein geheimer Wert, den Amazon Cognito verwendet, um den Client, der die ursprüngliche Autorisierung beantragt, mit dem Client zu vergleichen, der den Autorisierungscode gegen Token tauscht. 

Ihre App muss einen SHA256 Hash auf die Codeverifizierer-Zeichenfolge anwenden und das Ergebnis mit Base64 codieren. Übergeben Sie die Hash-Zeichenfolge [Autorisieren des Endpunkts](authorization-endpoint.md) als `code_challenge` Parameter im Anforderungstext an. Wenn Ihre App den Autorisierungscode gegen Token eintauscht, muss sie die Codeverifizierer-Zeichenfolge im Klartext als `code_verifier` Parameter im Anfragetext an die enthalten. [Token-Endpunkt](token-endpoint.md) Amazon Cognito führt den gleichen hash-and-encode Vorgang mit dem Code-Verifier durch. Amazon Cognito gibt ID-, Zugriffs- und Aktualisierungstoken nur zurück, wenn es feststellt, dass der Codeverifier zu derselben Codeabfrage führt, die er in der Autorisierungsanfrage erhalten hat.

**Um Authorization Grant Flow mit PKCE zu implementieren**

1. Öffnen Sie die [Amazon-Cognito-Konsole](https://console.aws.amazon.com/cognito/home). Wenn Sie dazu aufgefordert werden, geben Sie Ihre AWS Anmeldeinformationen ein.

1. Wählen Sie **User Pools** (Benutzerpools) aus.

1. Wählen Sie einen vorhandenen Benutzerpool aus der Liste aus oder erstellen Sie einen neuen Benutzerpool. Wenn Sie einen Benutzerpool erstellen, werden Sie während des Assistenten aufgefordert, einen App-Client einzurichten und die verwaltete Anmeldung zu konfigurieren.

   1. Wenn Sie einen neuen Benutzerpool erstellen, richten Sie während der geführten Einrichtung einen App-Client ein und konfigurieren Sie die verwaltete Anmeldung.

   1. Wenn Sie einen vorhandenen Benutzerpool konfigurieren, fügen Sie eine [Domain](cognito-user-pools-assign-domain.md) und einen [öffentlichen App-Client](user-pool-settings-client-apps.md) hinzu, falls Sie dies noch nicht getan haben.

1. Generieren Sie eine zufällige alphanumerische Zeichenfolge, in der Regel einen Universally Unique Identifier ([UUID](cognito-terms.md#terms-uuid)), um eine Code-Challenge für die PKCE zu erstellen. Diese Zeichenfolge ist der Wert des `code_verifier` Parameters, den Sie in Ihrer Anfrage an die senden. [Token-Endpunkt](token-endpoint.md) 

1. Hasht die `code_verifier` Zeichenfolge mit dem SHA256 Algorithmus. Kodieren Sie das Ergebnis des Hashing-Vorgangs auf Base64. Diese Zeichenfolge ist der Wert des `code_challenge` Parameters, den Sie in Ihrer Anfrage an die senden. [Autorisieren des Endpunkts](authorization-endpoint.md) 

   Das folgende Python Beispiel generiert einen `code_verifier` und berechnet den`code_challenge`:

   ```
   #!/usr/bin/env python3
   
   import secrets
   from base64 import urlsafe_b64encode
   from hashlib import sha256
   from string import ascii_letters
   from string import digits
   
   # use the secrets module for cryptographically strong random values
   alphabet = ascii_letters + digits
   code_verifier = ''.join(secrets.choice(alphabet) for _ in range(128))
   code_verifier_hash = sha256(code_verifier.encode()).digest()
   code_challenge = urlsafe_b64encode(code_verifier_hash).decode().rstrip('=')
   
   print(f"code challenge: {code_challenge}")
   print(f"code verifier: {code_verifier}")
   ```

   Im Folgenden finden Sie ein Beispiel für die Ausgabe des Python Skripts:

   ```
   code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg
   code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
   ```

1. Schließen Sie die verwaltete Anmeldung mit einer Anfrage zur Erteilung eines Autorisierungscodes bei PKCE ab. Im Folgenden finden Sie ein Beispiel für eine URL:

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&code_challenge=Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg&code_challenge_method=S256
   ```

1. Sammeln Sie die Autorisierung `code` und lösen Sie sie gegen Token mit dem Token-Endpunkt ein. Im Folgenden finden Sie ein Beispiel für eine Anfrage:

   ```
   POST /oauth2/token HTTP/1.1
   Host: mydomain.auth.us-east-1.amazoncognito.com
   Content-Type: application/x-www-form-urlencoded
   Content-Length: 296
   
   redirect_uri=https%3A%2F%2Fwww.example.com&
   client_id=1example23456789&
   code=7378f445-c87f-400c-855e-0297d072ff03&
   grant_type=authorization_code&
   code_verifier=9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
   ```

1. Überprüfen Sie die Antwort. Sie wird ID-, Zugriffs- und Aktualisierungstoken enthalten. Weitere Informationen zur Verwendung von Amazon Cognito Cognito-Benutzerpool-Token finden Sie unter[JSON-Webtoken (JWTs) für den Benutzerpool verstehen](amazon-cognito-user-pools-using-tokens-with-identity-providers.md).