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.
Überprüfen eines JSON Web-Tokens
JSONWeb-Token (JWTs) können einfach dekodiert, gelesen und geändert werden. Ein modifiziertes Zugriffstoken birgt das Risiko einer Rechteeskalation. Ein modifiziertes ID-Token birgt das Risiko eines Identitätswechsels. Ihre Anwendung vertraut Ihrem Benutzerpool als Token-Aussteller, aber was ist, wenn ein Benutzer das Token während der Übertragung abfängt? Sie müssen sicherstellen, dass Ihre Anwendung dasselbe Token erhält, das Amazon Cognito ausgestellt hat.
Amazon Cognito gibt Token aus, die einige der Integritäts- und Vertraulichkeitsfunktionen der OpenID Connect (OIDC) -Spezifikation verwenden. Benutzerpool-Token geben anhand von Objekten wie der Ablaufzeit, dem Aussteller und der digitalen Signatur die Gültigkeit an. Die Signatur, das dritte und letzte Segment des durch .
-getrennten BereichsJWT, ist die Schlüsselkomponente der Token-Validierung. Ein böswilliger Benutzer kann ein Token ändern, aber wenn Ihre Anwendung den öffentlichen Schlüssel abruft und die Signatur vergleicht, stimmt sie nicht überein. Jede Anwendung, die über die OIDC Authentifizierung verarbeitet JWTs wird, muss diesen Überprüfungsvorgang bei jeder Anmeldung durchführen.
Auf dieser Seite geben wir einige allgemeine und spezifische Empfehlungen zur Überprüfung vonJWTs. Die Anwendungsentwicklung umfasst eine Vielzahl von Programmiersprachen und Plattformen. Da die Implementierung von Amazon Cognito der öffentlichen Spezifikation OIDC ausreichend nahe kommt, kann jede seriöse JWT Bibliothek in der Entwicklungsumgebung Ihrer Wahl Ihre Überprüfungsanforderungen erfüllen.
Diese Schritte beschreiben die Überprüfung eines JSON Web-Tokens () JWT für einen Benutzerpool.
Voraussetzungen
Ihre Bibliothek oder Ihr Software-Framework erledigt möglicherweise bereits die Aufgaben in diesem Abschnitt. SDK AWS SDKsStellen Sie Tools für die Handhabung und Verwaltung von Amazon Cognito Cognito-Benutzerpool-Tokens in Ihrer App bereit. AWS Amplify beinhaltet Funktionen zum Abrufen und Aktualisieren von Amazon Cognito Cognito-Token.
Weitere Informationen finden Sie auf den folgenden Seiten.
Für die Dekodierung und Überprüfung eines JSON Web-Tokens () stehen viele Bibliotheken zur Verfügung. JWT Wenn Sie Token für die serverseitige API Verarbeitung manuell verarbeiten möchten oder wenn Sie andere Programmiersprachen verwenden, können diese Bibliotheken helfen. Informationen zur Arbeit mit JWT Tokens finden Sie in der OpenID Foundation-Bibliotheksliste
Bestätigen Sie Tokens mit aws-jwt-verify
Empfiehlt in einer Node.js -App die AWS aws-jwt-verify Bibliothek aws-jwt-verify
können Sie einen CognitoJwtVerifier
mit den Anspruchswerten auffüllen, die Sie für einen oder mehrere Benutzerpools überprüfen möchten. Zu den Werten, die überprüft werden können, gehören, dass
-
die Zugangs- oder ID-Tokens nicht falsch formatiert oder abgelaufen sind und eine gültige Signatur haben;
-
die Zugriffstokens von den korrekten Benutzerpools und App-Clients
kommen; -
Diese Zugriffstoken-Ansprüche enthalten die richtigen OAuth 2.0-Bereiche
. -
Dass die Schlüssel, mit denen Ihre Zugriffs- und ID-Tokens signiert wurden, mit einem Signaturschlüssel
kid
JWKSURIaus Ihren Benutzerpools übereinstimmen. Der JWKS URI enthält öffentliche Informationen über den privaten Schlüssel, mit dem das Token Ihres Benutzers signiert wurde. Sie finden den JWKS URI für Ihren Benutzerpool unter
https://cognito-idp.
.<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.json
Weitere Informationen und Beispielcode, den Sie in einer Node.js App oder einem AWS Lambda
Authorizer verwenden können, finden Sie unter aws-jwt-verify
Tokens verstehen und überprüfen
Bevor Sie die Tokeninspektion in Ihre App integrieren, sollten Sie sich überlegen, wie Amazon Cognito zusammenbautJWTs. Rufen Sie Beispiel-Tokens aus Ihrem Benutzerpool ab. Dekodieren und untersuchen Sie diese im Detail, um ihre Eigenschaften zu verstehen, und legen Sie fest, was Sie wann überprüfen möchten. So können Sie beispielsweise in einem Szenario die Gruppenmitgliedschaft und in einem anderen Bereiche überprüfen.
In den folgenden Abschnitten wird ein Verfahren zur manuellen Überprüfung von Amazon Cognito JWTs beschrieben, während Sie Ihre App vorbereiten.
Bestätigen Sie die Struktur des JWT
Ein JSON Web-Token (JWT) umfasst drei Abschnitte mit einem .
(Punkt-) Trennzeichen dazwischen.
- Header
-
Die Schlüssel-ID und der RSA Algorithmus
kid
alg
, mit denen Amazon Cognito das Token signiert hat. Amazon Cognito signiert Tokens mit einemalg
vonRS256
. Daskid
ist ein gekürzter Verweis auf einen RSA privaten 2048-Bit-Signaturschlüssel, der sich in Ihrem Benutzerpool befindet. - Nutzlast
-
Token-Ansprüche. In einem ID-Token enthalten die Ansprüche Benutzerattribute und Informationen über den Benutzerpool,
iss
, und den App-Client,aud
. In einem Zugriffstoken umfasst die Payload Bereiche, Gruppenmitgliedschaft, Ihren Benutzerpool alsiss
und Ihren App-Client alsclient_id
. - Signatur
-
Die Signatur ist nicht base64-dekodierbar wie der Header und die Payload. Es handelt sich RSA256 um eine Kennung, die aus einem Signaturschlüssel und Parametern abgeleitet wird und die Sie an Ihrem Computer beobachten können. JWKS URI
Der Header und die Payload sind Base64-codiertJSON. Sie können sie anhand der Zeichen eyJ
am Anfang erkennen, die zum Startzeichen {
dekodiert werden. Wenn Ihr Benutzer Ihrer App ein Base64-kodiertes JWT Token präsentiert und es nicht im Format ist[JSON
Header].[JSON Payload].[Signature]
, ist es kein gültiges Amazon Cognito Cognito-Token und Sie können es verwerfen.
Bestätigen Sie das JWT
Die JWT Signatur ist eine Hash-Kombination aus Header und Payload. Amazon Cognito generiert zwei Paare RSA kryptografischer Schlüssel für jeden Benutzerpool. Ein privater Schlüssel signiert Zugriffstokens und der andere signiert ID-Tokens.
Um die Signatur eines Tokens zu überprüfen JWT
-
Dekodieren Sie das ID-Token.
Die OpenID Foundation führt auch eine Liste von Bibliotheken für die Arbeit mit JWT Tokens
. Sie können ihn auch AWS Lambda zum Dekodieren des Benutzerpools verwenden. JWTs Weitere Informationen finden Sie unter Amazon Cognito JWT Cognito-Token dekodieren und verifizieren
mit. AWS Lambda -
Vergleichen Sie die lokale Schlüssel-ID (
kid
) mit der öffentlichenkid
.-
Laden Sie den entsprechenden öffentlichen JSON Webschlüssel (JWK) für Ihren Benutzerpool herunter und speichern Sie ihn. Er ist als Teil eines JSON Web Key Sets (JWKS) verfügbar. Sie können es finden, indem Sie Folgendes
jwks_uri
URI für Ihre Umgebung erstellen:https://cognito-idp.
<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.jsonWeitere Informationen zu JWK und JWK Sets finden Sie unter JSONWeb Key (JWK)
. Anmerkung
Amazon Cognito rotiert möglicherweise die Signaturschlüssel in Ihrem Benutzerpool. Es hat sich bewährt, öffentliche Schlüssel in Ihrer App zwischenzuspeichern, indem Sie
kid
als Cache-Schlüssel verwenden und den Cache regelmäßig aktualisieren. Vergleichen Sie diekid
in den Tokens, die Ihre App erhält, mit Ihrem Cache.Wenn Sie ein Token mit dem korrekten Aussteller, aber einer anderen
kid
erhalten, hat Amazon Cognito möglicherweise den Signaturschlüssel rotiert. Aktualisieren Sie den Cache von Ihrem Benutzerpool–jwks_uri
-Endpunkt aus.Dies ist eine
jwks.json
-Beispieldatei:{ "keys": [{ "kid": "1234example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "1234567890", "use": "sig" }, { "kid": "5678example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "987654321", "use": "sig" }] }
- Schlüssel-ID (
kid
) -
Dies
kid
ist ein Hinweis, der angibt, welcher Schlüssel verwendet wurde, um die JSON Websignatur (JWS) des Tokens zu sichern. - Algorithmus (
alg
) -
Der
alg
-Header-Parameter stellt den kryptografischen Algorithmus dar, mit dem das ID-Token gesichert wird. Benutzerpools verwenden einen RS256 kryptografischen Algorithmus, bei dem es sich um eine RSA Signatur mit SHA -256 handelt. Weitere Informationen dazu finden Sie unter RSA RSA Kryptografie. - Schlüsseltyp (
kty
) -
Der
kty
Parameter identifiziert die kryptografische Algorithmusfamilie, die mit dem Schlüssel verwendet wird, z. B. "RSA" in diesem Beispiel. - RSAExponent ()
e
-
Der
e
Parameter enthält den Exponentenwert für den RSA öffentlichen Schlüssel. Er wird als urlUInt Base64-codierter Wert dargestellt. - RSAModul ()
n
-
Der
n
Parameter enthält den Modulwert für den RSA öffentlichen Schlüssel. Er wird als urlUInt Base64-codierter Wert dargestellt. - Verwenden von (
use
) -
Der
use
-Parameter beschreibt die beabsichtigte Verwendung des öffentlichen Schlüssels. In diesem Beispiel stellt deruse
-Wertsig
die Signatur dar.
- Schlüssel-ID (
-
Suchen Sie im öffentlichen JSON Webschlüssel nach einem
kid
, derkid
Ihrem entspricht. JWT
-
-
Verwenden Sie eine JWT Bibliothek, um die Signatur des Ausstellers mit der Signatur im Token zu vergleichen. Die Signatur des Ausstellers wird aus dem öffentlichen Schlüssel (dem RSA Modul
"n"
)kid
in jwks.json abgeleitet, der dem Token entspricht.kid
Möglicherweise müssen Sie das Format zuerst in das Format konvertieren. JWK PEM Das folgende Beispiel verwendet JWT JWK und verwendet die Bibliothek Node.js, jsonwebtoken, um die Signatur zu überprüfen: JWT
Überprüfen der Ansprüche
Um JWT Ansprüche zu überprüfen
-
Stellen Sie mit einer der folgenden Methoden sicher, dass das Token nicht abgelaufen ist.
-
Dekodieren Sie das Token und vergleichen Sie den
exp
-Anspruch mit der aktuellen Uhrzeit. -
Wenn Ihr Zugriffstoken einen
aws.cognito.signin.user.admin
Anspruch enthält, senden Sie eine Anfrage an ein API Like GetUser. APIAnfragen, die Sie mit einem Zugriffstoken autorisieren, geben einen Fehler zurück, wenn Ihr Token abgelaufen ist. -
Präsentieren Sie Ihr Zugriffs-Token in einer Anfrage an den userInfo Endpunkt. Ihre Anfrage gibt einen Fehler zurück, wenn Ihr Token abgelaufen ist.
-
-
Der
aud
-Anspruch in einem ID-Token und derclient_id
-Anspruch in einem Zugriffstoken müssen mit der App-Client-ID übereinstimmen, die im Amazon-Cognito-Benutzerpool erstellt wurde. -
Der Aussteller (
iss
)-Anspruch muss mit Ihrem Benutzerpool übereinstimmen. Ein in derus-east-1
-Region erstellter Benutzerpool hat den folgendeniss
-Wert:https://cognito-idp.us-east-1.amazonaws.com/
.<userpoolID>
-
Prüfen Sie den
token_use
-Anspruch.-
Wenn Sie das Zugriffstoken nur in Ihren API Weboperationen akzeptieren, muss sein
access
Wert -
Verwenden Sie nur das ID-Token, muss der Wert sein
id
. -
Wenn Sie ID- und Zugriffstoken verwenden, muss der
token_use
-Anspruchid
oderaccess
sein.
-
Jetzt können Sie den Ansprüchen innerhalb des Tokens vertrauen.