Wie behebe ich „401 Unauthorized“-Fehler von einem API-Gateway-REST-API-Endpunkt, nachdem ich einen Amazon-Cognito-Benutzerpool eingerichtet habe?
Ich habe meinen Amazon-Cognito-Benutzerpool als COGNITO_USER_POOLS-Genehmiger auf meiner Amazon-API-Gateway-REST-API eingerichtet. Ich erhalte in der API-Antwort die Fehlermeldung „401 Unauthorized“.
Behebung
Hinweis: API Gateway kann aus verschiedenen Gründen 401 Unauthorized-Fehler zurückgeben. Das folgende Verfahren zeigt, wie du nur 401-Fehler beheben kannst, die sich auf COGNITO_USER_POOLS-Genehmiger beziehen.
Die Konfiguration des Genehmigers für die API-Methode überprüfen
Führe die folgenden Schritte aus:
- Öffne die API Gateway-Konsole.
- Wähle im Navigationsbereich APIs und dann deine API aus.
- Wähle im Navigationsbereich unter deiner API die Option Genehmiger.
- Überprüfe die Konfiguration des Genehmigers und stelle sicher, dass Folgendes zutrifft:
Die Benutzerpool-ID entspricht dem Aussteller des Tokens.
Du hast die API bereitgestellt.
Der Genehmiger arbeitet im Testmodus für ID-Token.
Hinweis: Du kannst diese Funktion nicht verwenden, um Zugriffstoken zu testen.
Weitere Informationen findest du unter Integrieren einer REST-API in einen Amazon-Cognito-Benutzerpool.
Hinweis: Wenn du die API nicht aufrufen kannst, nachdem du die Konfiguration des Genehmigers bestätigt hast, überprüfe die Gültigkeit des Sicherheitstokens.
Die Gültigkeit des Sicherheitstokens überprüfen
Um die Gültigkeit des Sicherheitstokens zu überprüfen, stelle sicher, dass Folgendes zutrifft:
- Das Sicherheitstoken ist nicht abgelaufen.
- Der Aussteller im Sicherheitstoken stimmt mit dem im API konfigurierten Amazon-Cognito-Benutzerpool überein.
- Die Zeichenfolgenwerte für dasID-Tokenund das Zugriffstokensind gültig.
Hinweis: Wenn die Zeichenfolgenwerte gültig sind, kannst du die Token decodieren. Wenn die Token nicht gültig sind, überprüfe deine Token. Stelle sicher, dass die Token beim Durchlaufen des Anforderungs-Headers keine zusätzlichen Leerzeichen enthalten.
Wichtig: Wenn du keine Bereiche für die API-Gateway-Methode konfiguriert hast, stelle sicher, dass du ein gültiges ID-Token verwendest. Wenn du zusätzliche Bereiche für die API-Gateway-Methode konfigurierst, stelle sicher, dass du ein gültiges Zugriffstoken verwendest. Weitere Informationen findest du unter Wie autorisiere ich den Zugriff auf API-Gateway-APIs mithilfe benutzerdefinierter Bereiche in Amazon Cognito?
Beispiel für Sicherheitstoken-Nutzdaten:
Id token payload: { "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "aud": "xxxxxxxxxxxxexample", "email_verified": true, "token_use": "id", "auth_time": 1500009400, "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example", "cognito:username": "janedoe", "exp": 1500013000, "given_name": "Jane", "iat": 1500009400, "email": "janedoe@example.com" } Access token payload: { "auth_time": 1500009400, "exp": 1500013000, "iat": 1500009400, "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example", "scope": "aws.cognito.signin.user.admin", "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "token_use": "access", "username": "janedoe@example.com" }
Notiere dir die folgenden Anspruchsnamen in den Beispiel-Nutzdaten für Sicherheitstoken:
- token_use gibt den Typ des Tokens an (ID- oder Zugriffstoken).
- exp gibt die Ablaufzeit des Tokens an.
Hinweis: Der exp-Anspruch wird in Sekunden von der Unix-Epoche (1970-01-01T0:0:0Z) bis zum Ablaufdatum und -zeitpunkt des Tokens in koordinierter Weltzeit (UTC) angegeben. - auth_time gibt an, wann das Token ausgestellt wurde.
- iss gibt die Domain des Benutzerpools an, der die Token ausgestellt hat.
Wichtig: Das von dir verwendete Token muss mit dem Benutzerpool übereinstimmen, den du für die API-Gateway-Methode konfigurierst. Wenn du die API nicht aufrufen kannst, überprüfe, ob du den Autorisierungs-Header korrekt verwendest. Wenn du 401-Fehler erhältst, stelle sicher, dass deine Ressourcenrichtlinien die Anforderung nicht blockieren.
Wenn du Postman verwendest, um die API aufzurufen
Verwende den OAuth-2.0-Autorisierungsmodus, um Amazon-Cognito-Token direkt zu verwenden. Weitere Informationen findest du unter API authentication and authorization in Postman (API-Authentifizierung und -Autorisierung in Postman) auf der Postman-Website.
Wenn du den OAuth-2.0-Autorisierungsmodus einrichtest, vergewissere dich, dass die folgenden Punkte zutreffen:
- Die Option Grant type (Gewährungstyp) ist auf Authorization code (Autorisierungscode) oder Authorization implicit (implizite Autorisierung) eingestellt.
- Die Rückruf-URL entspricht der umgeleiteten URL, die auf dem App-Client des Benutzerpools konfiguriert ist.
- Die Auth-URL hat das folgende Format: https://mydomain.auth.us-east-1.amazoncognito.com/login
Hinweis: Ersetze mydomain durch den Domainnamen, den du für die Konfiguration deines Benutzerpools verwendest. Stelle sicher, dass du die richtige AWS-Region eingibst, in der du deine API hostest. - Die Client-ID ist die App-Client-ID des Benutzerpools.
Hinweis: Wenn du dem App-Client des Benutzerpools ein Client-Geheimnis zuordnest, gib das Geheimnis auf der Registerkarte Autorisierung an. Wenn dem App-Client des Benutzerpools kein Client-Geheimnis zugeordnet ist, lasse das Feld Client-Geheimnis leer. - Der Bereich ist als Openid konfiguriert.
Hinweis: Du musst den Openid-Bereich auf dem App-Client des Benutzerpools zulassen. - Gib für Authorization code flow (Autorisierungscodefluss) den richtigen Token-Endpunkt für den Amazon-Cognito-Benutzerpool ein.
Beispiel für einen Token-Endpunkt des Amazon-Cognito-Benutzerpools:
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token
Hinweis: Wenn der Token-Endpunkt den Inhaltstyp nicht unterstützt, kann Postman den erforderlichen Inhalt nicht übergeben und es kommt zu einem 405-Fehler. Verwende den impliziten Datenfluss, um dieses Problem zu vermeiden. Weitere Informationen findest du unter OAuth-2.0-Gewährungen.
Ähnliche Informationen
Wie decodiere und überprüfe ich die Signatur eines Amazon-Cognito-JSON-Web-Tokens?
Zugriff auf REST-APIs mithilfe von Amazon-Cognito-Benutzerpools als Genehmiger steuern
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr