Wie behebe ich „401 Nicht autorisiert“-Fehler von einem API-Gateway-REST-API-Endpunkt, nachdem ich einen Amazon-Cognito-Benutzerpool eingerichtet habe?

Lesedauer: 4 Minute
0

Ich habe meinen Amazon-Cognito-Benutzerpool als COGNITO_USER_POOLS-Autorisierer auf meiner Amazon-API-Gateway-REST-API eingerichtet. Jetzt erhalte ich in der API-Antwort die Fehlermeldung „401 Nicht autorisiert“. Wie behebe ich diese Fehler?

Behebung

Hinweis:API Gateway kann aus verschiedenen Gründen401 Nicht autorisiert-Fehler zurückgeben. Das folgende Verfahren zeigt, wie Sie 401-Fehler beheben können, die sich nur auf COGNITO_USER_POOLS-Autorisierungen beziehen.

Überprüfen Sie die Konfiguration des Autorisierers für die API-Methode

1.Wählen Sie in derAPI-Gateway-Konsoleim BereichAPIsden Namen Ihrer API aus.

2.Wählen Sie im Navigationsbereichunter Ihrer APIdie Option Autorisierer.

3.Überprüfen Sie die Konfiguration des Autorisierers und stellen Sie sicher, dass Folgendes zutrifft:
Die Benutzerpool-ID entspricht dem Aussteller des Tokens.
Die API wird bereitgestellt.
Der Autorisierer arbeitet im Testmodus.

Weitere Informationen finden Sie unterIntegrieren einer REST-API in einen Amazon-Cognito-Benutzerpool.

**Hinweis:**Wenn Sie Ihre API nicht aufrufen können, nachdem Sie die Konfiguration des Autorisierers für die API-Methode bestätigt haben, überprüfen Sie die Gültigkeit des Sicherheitstokens.

Überprüfen Sie die Gültigkeit des Sicherheitstokens

Wenn Sie die Gültigkeit des Sicherheitstokens überprüfen, stellen Sie 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 dasZugriffstokensind gültig.
    **Hinweis:**Wenn die Zeichenfolgenwerte gültig sind, dann können Sie die Token decodieren. Wenn die Token nicht gültig sind, stellen Sie sicher, dass keine Leerzeichen in die Token eingefügt wurden, als sie im Anforderungsheader übergeben wurden.

Wichtig:Wenn für die API-Gateway-Methode keine zusätzlichen Bereiche konfiguriert sind, stellen Sie sicher, dass Sie ein gültigesID-Tokenverwenden. Wenn zusätzliche Bereiche für die API-Gateway-Methode konfiguriert sind, vergewissern Sie sich, dass Sie ein gültigesZugriffstokenverwenden. Weitere Informationen finden Sie unterIntegrieren einer REST-API in einem Amazon-Cognito-BenutzerpoolundVerwenden benutzerdefinierter Amazon-Cognito-Bereiche in API Gateway.

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"
}

Notieren Sie sich die folgenden Claim-Namen in der Beispiel-Nutzlast für Sicherheitstoken:

  • token_usegibt den Typ des Tokens an (ID oder Zugriffstoken).
  • expgibt die Ablaufzeit des Tokens an.
    Hinweis:DerExp-Anspruch wird in Sekunden seit der Unix-Epoche (1970-01-01T0:0:0Z) bis zum Ablaufdatum und -zeitpunkt des Tokens in koordinierter Weltzeit (UTC Coordinated Universal Time) angegeben.
  • auth_timegibt an, wann das Token ausgestellt wurde.
  • issgibt die Domäne des Benutzerpools an, der die Token ausgestellt hat.

Wichtig:

  • Stellen Sie sicher, dass das von Ihnen verwendete Token mit dem Benutzerpool übereinstimmt, der für die API-Gateway-Methode konfiguriert wurde. Wenn Sie die API immer noch nicht aufrufen können, überprüfen Sie, ob Sieden Autorisierungsheader korrekt verwenden.
  • Wenn Sie immer noch 401-Fehler erhalten, stellen Sie sicher, dass IhreRessourcenrichtliniendie Anfrage nicht blockieren.

Wenn Sie Postman zum Aufrufen der API verwenden

Verwenden Sie denOAuth 2.0-Autorisierungsmodus, um Amazon- Cognito-Token direkt zu verwenden. Wenn Sie den OAuth 2.0-Autorisierungsmodus einrichten, vergewissern Sie sich, dass die folgenden Punkte zutreffen:

  • Der BerechtigungstypistBerechtigung-Codeoder**implizite Berechtigung**entsprechend Ihrer Konfiguration auf dem App-Client des Benutzerpools.
  • DieCallback-URLentspricht derumgeleiteten URL, die auf dem App-Client des Benutzerpools konfiguriert ist.
  • DieAuth-URLhat das folgende Format:
https://mydomain.auth.us-east-1.amazoncognito.com/login

Wichtig:Ersetzen Siemydomaindurch den Domänennamen, den Sie für die Konfiguration Ihres Benutzerpools verwenden. Stellen Sie sicher, dass Sie die richtige AWS-Region eingeben, in der Ihre API gehostet wird.

  • Client-IDist die App-Client-ID des Benutzerpools.
    Hinweis:Wenn ein Client-Geheimnis mit dem App-Client des Benutzerpools verknüpft ist, stellen Sie sicher, dass Sie das Client-Geheimnis auf der RegistrierteBerechtigungim FeldClient-Geheimnisangeben. Wenn dem App-Client des Benutzerpools kein Client-Geheimnis zugeordnet ist, lassen Sie das FeldClient-Geheimnisleer.
  • Der Geltungsbereichist alsopenidkonfiguriert.
    Hinweis:DerOpenID-Bereich muss auch auf dem App-Client des Benutzerpools zulässig sein.
  • Der richtige Token-Endpunkt des Amazon-Cognito-Benutzerpools ist für denAutorisierungscodeflusseingegeben.

Beispiel für einen Token-Endpunkt des Amazon-Cognito-Benutzerpools

https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token

**Hinweis:**Postman übergibt den erforderlichen Inhaltstyp möglicherweise nicht an den Token-Endpunkt, was zu einem 405-Fehler führen kann. Bei der Verwendung des impliziten Flusses erhalten Sie jedoch keine 504-Fehlermeldung.


Weitere Informationen

Sicherer API-Zugriff mit Amazon-Cognito-Verbundidentitäten, Amazon-Cognito-Benutzerpools und Amazon-API-Gateway

Wie kann ich die Signatur eines Amazon-Cognito-JSON-Web-Tokens decodieren und überprüfen?

Kontrolle des Zugriffs auf eine REST-API mit Amazon-Cognito-Benutzerpools als Autorisierer

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren