New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Wie decodiere und überprüfe ich die Signatur eines Amazon Cognito JSON Web-Tokens?
Ich möchte einen Amazon Cognito-Benutzerpool als Authentifizierungsmethode für meine Anwendung verwenden. Ich möchte eine sichere Methode zur Überprüfung der ID und der Zugriffstoken, die Kunden an meine Anwendung senden.
Kurzbeschreibung
Wenn Clients einen Benutzerpool verwenden, um sich bei der Anwendung zu authentifizieren, sendet Cognito ein JSON Web Token (JWT), das du decodieren, lesen und ändern kannst. Um Cognito-Benutzerdetails von einem JWT abzurufen, decodiere das Token und überprüfe die Signatur.
Wichtig: Bevor du Zugriff auf deine Ressourcen gewährst, musst du die Signatur überprüfen.
Lösung
Sicherstellen, dass Cognito JWTs ausgestellt hat
Verwende den folgenden Code in JavaScript:
import { CognitoJwtVerifier } from "aws-jwt-verify"; // Verifier that expects valid access tokens: const verifier = CognitoJwtVerifier.create({ userPoolId: "user_pool_id", tokenUse: "access", clientId: "client_id", }); try { const payload = await verifier.verify( "eyJraWQeyJhdF9oYXNoIjoidk..." // the JWT as string ); console.log("Token is valid. Payload:", payload); } catch { console.log("Token not valid!"); }
Hinweis: Ersetze user_pool_id durch deine Benutzerpool-ID und client_id durch deine App-Client-ID. Aktualisiere für das ID-Token das Feld tokenUse auf „id“. Eine Liste der verfügbaren Parameter findest du unter aws-jwt-verify auf der GitHub-Website.
Wenn du eine andere Programmiersprache verwendest, ziehe die jwt.io-Bibliotheken auf der JWT-Website oder die OpenID Connect-Bibliotheken auf der OpenID-Website zu Rate. Ein Codebeispiel findest du unter Decode and verify Amazon Cognito JWT tokens (Amazon Cognito JWT-Token decodieren und verifizieren) auf der GitHub-Website.
Cognito gibt bis zu drei Token zurück, das ID-Token, das Zugriffstoken und das Aktualisierungs-Token. Wenn du REST APIs, AWS Amplify oder AWS SDKs verwendest, um einen Benutzer zu authentifizieren, erhältst du alle drei Token.
Für die von Cognito gehostete Benutzeroberfläche hängt das Token, das du erhältst, von der Art der Autorisierungsgewährung ab, die du verwendest. Wenn du die implizite Gewährung verwendest, erhältst du nur das Zugriffs- und ID-Token. Die Autorisierungscode-Gewährung gibt Zugriffs-, ID- und Aktualisierungs-Token zurück. Die Gewährung der Client-Anmeldeinformationen gibt nur das Zugriffstoken zurück.
Zugriffs- und ID-Token enthalten eine Kopfzeile, Nutzdaten und eine Signatur. Der Client kann das Aktualisierungs-Token nicht decodieren oder verifizieren.
Im Folgenden findest du ein Beispiel für eine ID-Token-Kopfzeile. Die Kopfzeile enthält die Schlüssel-ID („kid“) und den Algorithmus („alg“), der zum Signieren des Tokens verwendet wird. Der RS256-Algorithmus ist eine RSA-Signatur mit SHA-256:
{ "kid": "key_id_example=", "alg": "RS256" }
Das Folgende ist ein Beispiel für Nutzdaten, die Informationen über den Benutzer und Zeitstempel der Erstellung und des Ablaufs des Tokens enthalten:
{ "sub": "aaaaaaaa-bbbb-cccc-dddd-example", "aud": "audience_example", "email_verified": true, "token_use": "id", "auth_time": 1500009400, "iss": "https://cognito-idp.ap-southeast-2.amazonaws.com/ap-southeast-2_example", "cognito:username": "anaya", "exp": 1500013000, "given_name": "Anaya", "iat": 1500009400, "email": "anaya@example.com" }
Die Signatur ist eine gehashte und verschlüsselte Kombination aus Kopfzeile und Nutzdaten.
Cognito generiert zwei RSA-Schlüsselpaare für jeden Benutzerpool. Der private Schlüssel jedes Paares wird verwendet, um das ID-Token oder Zugriffstoken kryptografisch zu signieren. Du findest die öffentlichen Schlüssel an einer Adresse an der folgenden Stelle:
https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/jwks.json
Hinweis: Ersetze region durch die AWS-Region, in der sich dein Benutzerpool befindet, und userPoolId durch deine Benutzerpool-ID.
Die JSON-Datei (jwks.json) ist im folgenden Format strukturiert:
{ "keys": [{ "alg": "RS256", "e": "AQAB", "kid": "abcdefghijklmnopqrsexample=", "kty": "RSA", "n": "lsjhglskjhgslkjgh43lj5h34lkjh34lkjht3example", "use": "sig" }, { "alg": "RS256", "e": "AQAB", "kid": "fgjhlkhjlkhexample=", "kty": "RSA", "n": "sgjhlk6jp98ugp98up34hpexample", "use": "sig" }] }
Um die Signatur eines Cognito-JWT zu überprüfen, suche nach dem öffentlichen Schlüssel mit einer Schlüssel-ID, die mit der Kopfzeile des Tokens übereinstimmt. Verwende verschiedene Bibliotheken, um die Signatur des Tokens zu überprüfen und Werte wie Ablauf und Benutzername zu extrahieren.
Es ist eine bewährte Methode, zu überprüfen, ob das Token nicht abgelaufen ist. Stelle außerdem sicher, dass die Zielgruppe („aud“) in den Nutzdaten mit der App-Client-ID übereinstimmt, die du im Amazon Cognito-Benutzerpool erstellt hast. Die aws-jwt-verify-Bibliothek überprüft diese Werte für dich. Weitere Informationen findest du unter aws-jwt-verify auf der GitHub-Website.
Öffentliche Schlüssel zwischenspeichern
Da öffentliche Schlüssel im JWKS-Endpunkt selten rotiert werden, musst du sie nicht jedes Mal, wenn du ein Token verifizierst, vom Endpunkt herunterladen. Lade stattdessen die öffentlichen Schlüssel herunter und speichere sie auf dem lokalen Computer, auf dem du die JWT-Token-Überprüfungslogik verwendest.
Die „kid“ ist eine eindeutige Kennung für die öffentlichen Schlüssel. Um ein JWT-Token zu verifizieren, überprüfe den lokalen Cache, um festzustellen, ob sich die „kid“ in der Token-Kopfzeile im Cache befindet. Wenn kein Cache vorhanden ist, lade die öffentlichen Schlüssel vom JWKS-Endpunkt herunter und aktualisiere den Cache.
Verwendung verschiedener Methoden, um den Ablauf- oder Sperrstatus eines Tokens zu überprüfen
Du kannst Aktualisierungs-Token widerrufen und Zugriffstoken ungültig machen, aber du kannst keine ID-Token widerrufen. JWT-Verifier-Bibliotheken überprüfen den Ablauf des Tokens, aber die Bibliotheken überprüfen nicht den Sperrstatus eines Tokens. Eine Sperrstatusüberprüfung erfordert eine serverseitige Überprüfung.
Ähnliche Informationen
JSON-Web-Token (JWTs) für Benutzerpools verstehen
Wie widerrufe ich JWT-Token in Amazon Cognito mithilfe der AWS CLI?

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 9 Monaten
- AWS OFFICIALAktualisiert vor 10 Monaten