View a markdown version of this page

Verwendung von PKCE bei der Gewährung von Autorisierungscodes - Amazon Cognito

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 bei der Gewährung von Autorisierungscodes

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

Wie Amazon Cognito PKCE verwendet

Um die Authentifizierung mit PKCE zu starten, muss Ihre Anwendung einen eindeutigen Zeichenfolgenwert generieren. Diese Zeichenfolge ist der Code-Verifier, ein geheimer Wert, den Amazon Cognito verwendet, um den Client, der die Erstautorisierung beantragt, mit dem Client zu vergleichen, der den Autorisierungscode gegen Tokens eintauscht.

Ihre App muss einen SHA256-Hash auf die Code-Verifier-Zeichenfolge anwenden und das Ergebnis in Base64 codieren. Übergeben Sie die Hash-Zeichenfolge Autorisieren des Endpunkts als code_challenge Parameter im Anforderungstext an den. Wenn Ihre App den Autorisierungscode gegen Token eintauscht, muss sie die Codeüberprüfungszeichenfolge im Klartext als code_verifier Parameter im Anforderungstext an den enthalten. Token-Endpunkt Amazon Cognito führt den gleichen Hash- und Verschlüsselungsvorgang auf dem Code-Verifier durch. Amazon Cognito gibt nur ID-, Zugriffs- und Aktualisierungstoken zurück, wenn festgestellt wird, 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. Wenn Sie dazu aufgefordert werden, geben Sie Ihre AWS Anmeldeinformationen ein.

  2. Wählen Sie User Pools (Benutzerpools) aus.

  3. 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 einen App-Client ein und konfigurieren Sie die verwaltete Anmeldung während der geführten Einrichtung.

    2. Wenn Sie einen vorhandenen Benutzerpool konfigurieren, fügen Sie eine Domain und einen öffentlichen App-Client hinzu, falls Sie dies noch nicht getan haben.

  4. Generieren Sie eine zufällige alphanumerische Zeichenfolge, in der Regel eine Universally Unique Identifier (UUID), um eine Codeherausforderung für den PKCE zu erstellen. Diese Zeichenfolge ist der Wert des code_verifier Parameters, den Sie in Ihrer Anfrage an den senden. Token-Endpunkt

  5. Hashen Sie die code_verifier Zeichenfolge mit dem SHA256-Algorithmus. Kodiert das Ergebnis der Hashing-Operation in Base64. Diese Zeichenfolge ist der Wert des code_challenge Parameters, den Sie in Ihrer Anfrage an den senden. Autorisieren des Endpunkts

    Im folgenden Python Beispiel wird ein generiert code_verifier und berechnet: 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}")

    Das Folgende ist eine Beispielausgabe aus dem Python Skript:

    code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  6. Schließen Sie die verwaltete Anmeldung mit einer Anfrage zur Erteilung eines Autorisierungscodes bei PKCE ab. Im Folgenden finden Sie eine Beispiel-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
  7. Sammeln Sie die Autorisierung code und lösen Sie sie gegen Token mit dem Token-Endpunkt ein. Das Folgende ist 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
  8. Überprüfen Sie die Antwort. Sie wird ID-, Zugriffs- und Aktualisierungstoken enthalten. Weitere Informationen zur Verwendung von Amazon Cognito-Benutzerpool-Token finden Sie unterGrundlegendes zu JSON-Web-Tokens (JWTs) für Benutzerpools.