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.
Verifizieren eines JSON-Web-Tokens
JSON-Webtoken (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 nutzen. 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 JWT, 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 die OIDC-Authentifizierung verarbeitet JWTs , muss diesen Überprüfungsvorgang bei jeder Anmeldung durchführen.
Auf dieser Seite geben wir einige allgemeine und spezifische Empfehlungen zur Überprüfung von. JWTs Die Anwendungsentwicklung umfasst eine Vielzahl von Programmiersprachen und Plattformen. Da Amazon Cognito OIDC so nah an der öffentlichen Spezifikation implementiert, kann jede seriöse JWT-Bibliothek in der Entwicklungsumgebung Ihrer Wahl Ihre Überprüfungsanforderungen erfüllen.
Diese Schritte beschreiben die Verifizierung eines Benutzerpool-JSON-Web-Tokens (JWT).
Voraussetzungen
Ihre Bibliothek, Ihr SDK oder Ihr Software-Framework übernehmen möglicherweise bereits die Aufgaben in diesem Abschnitt. AWS SDKs Stellen 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.
Viele Bibliotheken sind zum Decodieren und Verifizieren eines JSON Web Token (JWT) verfügbar. Wenn Sie Tokens für die serverseitige API-Verarbeitung manuell verarbeiten müssen, oder wenn Sie andere Programmiersprachen verwenden, können diese Bibliotheken hilfreich sein. Weitere Informationen finden Sie in der Liste der OpenID Foundation mit Bibliotheken für die Arbeit mit JWT-Token
Bestätigen Sie Token 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
. -
die Schlüssel, die Ihre Zugangs- und ID-Tokens signiert haben, mit einem
kid
-Signaturschlüssel aus der JWKS-URI Ihrer Benutzerpools übereinstimmen. Die JWKS-URI enthält öffentliche Informationen über den privaten Schlüssel, mit dem das Token Ihres Benutzers signiert wurde. Die JWKS-URI für Ihren Benutzerpool finden Sie 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 zusammenbaut JWTs. 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 der Struktur des JWT
Ein JSON-Web-Token (JWT) enthält drei Abschnitte mit einem .
(Punkt)-Zeichen dazwischen.
- Header
-
Die Schlüssel-ID,
kid
, und der RSA-Algorithmus,alg
, mit denen Amazon Cognito das Token signiert hat. Amazon Cognito signiert Tokens mit einemalg
vonRS256
. Dieskid
ist ein gekürzter Verweis auf einen privaten 2048-Bit-RSA-Signaturschlüssel, der in Ihrem Benutzerpool gespeichert ist. - 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 dekodierbar (base64url) wie der Header und die Payload. Es handelt sich RSA256 um einen Bezeichner, der aus einem Signaturschlüssel und Parametern abgeleitet wird und die Sie an Ihrer JWKS-URI beobachten können.
Der Header und die Nutzlast sind Base64URL-kodierte JSON-Dateien. Sie können sie anhand der Zeichen eyJ
am Anfang erkennen, die zum Startzeichen {
dekodiert werden. Wenn Ihr Benutzer Ihrer App ein base64url-codiertes JWT 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.
Überprüfen des JWT
Die JWT-Signatur ist eine gehashte Kombination aus Header und Nutzlast. Amazon Cognito generiert zwei Paare RSA-Kryptoschlüssel für jeden Benutzerpool. Ein privater Schlüssel signiert Zugriffstokens und der andere signiert ID-Tokens.
Verifizieren der Signatur eines JWT-Tokens
-
Dekodieren Sie das ID-Token.
Die OpenID Foundation pflegt auch eine Liste mit Bibliotheken für die Arbeit mit JWT-Token
. Sie können es auch verwenden, um den Benutzerpool zu dekodieren. AWS Lambda JWTs Weitere Informationen finden Sie unter Amazon Cognito JWT-Token dekodieren und verifizieren
mithilfe von. AWS Lambda -
Vergleichen Sie die lokale Schlüssel-ID (
kid
) mit der öffentlichenkid
.-
Laden Sie den entsprechenden JWK (JSON Web Key) für Ihren Benutzerpool herunter und speichern Sie ihn. Er ist als Teil eines JWKS (JSON Web Key Set) verfügbar. Sie können ihn finden, indem Sie die folgende
jwks_uri
-URI für Ihre Umgebung konstruieren:https://cognito-idp.
<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.jsonWeitere Informationen zu JWK- und JWK-Sets finden Sie unter JSON Web 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
) -
Der
kid
-Parameter ist ein Hinweis darauf, 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 zu RSA finden Sie unter RSA-Kryptografie. - Schlüsseltyp (
kty
) -
Der
kty
-Parameter identifiziert die kryptografischen Algorithmus-Familie, die mit dem Schlüssel verwendet wird, z. B. „RSA“ in diesem Beispiel. - RSA-Exponent (
e
) -
Der
e
-Parameter enthält den Exponentenwert für den öffentlichen RSA-Schlüssel. Er wird als Base64URL-codierter Wert dargestellt. UInt - RSA-Modulo (
n
) -
Der
n
-Parameter enthält den Modulo-Wert für den öffentlichen RSA-Schlüssel. Er wird als Base64Url -codierter Wert dargestellt. UInt - 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 (
-
Durchsuchen Sie den öffentlichen JSON-Web-Schlüssel nach einer
kid
die mit derkid
Ihres JWT übereinstimmt.
-
-
Verwenden Sie eine JWT-Bibliothek, um die Signatur des Ausstellers mit der Signatur im Token zu vergleichen. Die Signatur des Emittenten leitet sich aus dem öffentlichen Schlüssel (den RSA-Modulen
"n"
) deskid
in jwks.json ab, der mit dem Tokenkid
übereinstimmt. Möglicherweise müssen Sie den JWK zuerst in das PEM-Format konvertieren. Das folgende Beispiel benutzt das JWT und das JWK und verwendet die Node.js-Bibliothek, jsonwebtoken, um die JWT-Signatur zu überprüfen:
Überprüfen der Ansprüche
Überprüfen der JWT-Ansprüche
-
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 eine API wie. GetUser API-Anfragen, die Sie mit einem Zugriffs-Token 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 nur das Zugriffstoken in den Web-API-Operationen akzeptieren, muss der Wert lauten
access
. -
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.