Wie richte ich als Authorizer einen Amazon-Cognito-Benutzerpool auf einer REST-API in API Gateway ein?

Lesedauer: 7 Minute
0

Ich möchte als Authorizer einen Amazon-Cognito-Benutzerpool auf meiner REST-API in Amazon API Gateway einrichten.

Kurzbeschreibung

Es gibt zwei Möglichkeiten, einen Amazon-Cognito-Benutzerpool als Authorizer auf einer REST-API in API-Gateway einzurichten:

Du kannst für die Autorisierung entweder ID-Token oder Zugriffstoken verwenden. Zugriffstoken können benutzerdefinierte Bereiche in Amazon Cognito verwenden, um den Zugriff auf API-Gateway-APIs zu autorisieren. Ein Lambda Authorizer kann die von Amazon Cognito ausgegebenen ID-Token und Zugriffstoken validieren.

Weitere Informationen findest du unter den folgenden Themen:

Lösung

Voraussetzungen:

Erstellen eines COGNITO_USER_POOLS-Authorizer

Weitere Informationen findest du unterIntegrieren einer REST-API in einen Amazon Cognito-Benutzerpool. Folge den Anweisungen im Abschnitt So erstellst du einen COGNITO_USER_POOLS-Authorizer mithilfe der API-Gateway-Konsole.

Testen des neuen COGNITO_USER_POOLS-Authorizers

Führe die folgenden Schritte aus:

  1. Öffne die API Gateway-Konsole.
  2. Wähle unter dem neuen Autorisierer die Schaltfläche Testen.
  3. Gib im Fenster Test für Autorisierung ein ID-Token aus dem neuen Amazon-Cognito-Benutzerpool ein.
  4. Wähle Testen aus.
    Hinweis: Wenn das ID-Token korrekt ist, gibt der Test den Antwortcode 200 zurück. Ein falsches ID-Token gibt Antwortcode 401 zurück.

Konfiguration des COGNITO_USER_POOLS-Authorizer über eine API-Methode

Weitere Informationen findest du unterIntegrieren einer REST-API in einen Amazon Cognito-Benutzerpool. Folge den Anweisungen im Abschnitt So konfigurierst du einen COGNITO_USER_POOLS-Authorizer mit Methoden.

Anfordern von Autorisierungstoken

Es gibt drei Möglichkeiten, Autorisierungstoken zu erhalten:

Hinweis: Richte die auf Amazon Cognito gehostete Benutzeroberfläche mit Gewährung eines Autorisierungscodes ein, damit die Anwendung den Code gegen einen Token-Endpunkt austauschen kann.

Wenn du einen impliziten Gewährungstyp verwendest, kannst du die Gewährung über die Rückruf-URL abrufen. Der Rückruf-URL werden für den impliziten Ablauf die Zugriffstoken- und ID-Token-Parameter angehängt. Stelle sicher, dass du den richtigen Tokentyp verwendest.

Verwende die gehostete Benutzeroberfläche für Amazon Cognito, um Autorisierungstoken zu erhalten

Hinweis: Wenn du den Autorisierungscode-Grant-Ablauf verwendest, muss der Antworttyp-Parameter „Code“ lauten.

Gehe wie folgt vor, um den Ablauf „Autorisierungscode-Grant“ zu verwenden:

  1. Versende eine GET-Anfrage für die Gewährung eines Autorisierungscodes:

    https://example_domain/oauth2/authorize?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url

    Hinweis: Ersetze example_domain durch den Domainnamen des Benutzerpools. Ersetze example_app_client_id durch die App-Client-ID des Benutzerpools. Ersetze example_callback_url durch die Rückruf-URL. Füge den Parameter identity_provider ein, damit der Endpunkt zum Partneridentitätsanbieter weiterleitet. Wenn der App-Client nur für Amazon-Cognito-Benutzerpools konfiguriert ist, leitet der folgende Endpunkt zum /login-Endpunkt weiter:

    https://example_domain/login?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url
  2. Melde dich bei dem Benutzerpool oder dem Partneridentitätsanbieter an. Die Benutzeroberfläche leitet zu der URL weiter, die im Rückruf für den App-Client angegeben ist.
    Wichtig: Die Umleitungs-URL enthält den Autorisierungscode, der mit dem Token-Endpunkt ausgetauscht werden muss, um gültige Token zu erhalten.

  3. Sende eine POST-Anfrage an den Endpunkt /oauth2/token, um einen Autorisierungscode gegen Token auszutauschen. Weitere Informationen findest du unter Token-Endpunkt.

Beispiel für eine POST-Anfrage zum Austausch eines Autorisierungscodes gegen Token

**Hinweis:**Die POST-Anfrage im Beispiel verwendet den folgenden /oauth2/token-Endpunkt: https://example_domain.auth.us-east-1.amazoncognito.com/oauth2/token&

Content-Type='application/x-www-form-urlencoded'&Authorization=Basic ZXhhbXBsZTEyMzQ1Njc4OTA6enl4OTh3N3l2dHNycTY1NHBvMzIx
grant_type=authorization_code&
client_id=example1234567890&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect

Beispiel für eine Antwort auf eine POST-Anfrage

HTTP/1.1 200 OK Content-Type: application/json

{
  "access_token":"abCde1example",
  "id_token":"abCde2example",
  "refresh_token":"abCde3example",
  "token_type":"Bearer",
  "expires_in":3600
}

Hinweis: Wenn du den impliziten Zuschussablauf verwendest, muss der Antworttyp-Parameter „Token“ lauten.

Gehe wie folgt vor, um den Implicit Grant-Flow zu verwenden:

  1. Sende eine GET-Anfrage für eine implizite Gewährung:

    https://example_domain/oauth2/authorize?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url

    Hinweis: Ersetze example_domain durch den Domainnamen des Benutzerpools. Ersetze example_app_client_id durch die App-Client-ID des Benutzerpools. Ersetze example_callback_url durch die Rückruf-URL. Füge den Parameter identity_provider ein, damit der Endpunkt zum Partneridentitätsanbieter weiterleitet. Wenn der App-Client nur für Amazon-Cognito-Benutzerpools konfiguriert ist, leitet der folgende Endpunkt zum /login-Endpunkt weiter:

    https://example_domain/login?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url
  2. Melde dich mit dem Benutzernamen und Passwort eines bestehenden Benutzers bei dem Benutzerpool an oder erstelle einen neuen Benutzer für die Anmeldung. Die Benutzeroberfläche leitet zu der URL weiter, die im Rückruf für den App-Client angegeben ist.
    Hinweis: Die Weiterleitungs-URL enthält das ID-Token und das Zugriffstoken.
    Beispiel einer Weiterleitungs-URL:

    https://www.example.com/#id_token=123456789idtoken123456789&access_token=123456789accesstoken123456789expires_in=3600&token_type=Bearer

Verwende die AWS-Befehlszeilenschnittstelle, um Autorisierungstoken

**Hinweis:**Wenn du beim Ausführen von Befehlen in AWS CLI Fehlermeldungen erhältst, findest du weitere Informationen unter Beheben von AWS CLI-Fehlern. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.

Führe den folgenden initiate-auth-Befehl in AWS CLI aus, um Autorisierungstoken zu erhalten:

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=example_user,PASSWORD=example_password --client-id example_app_client_id

Wichtig: Ersetze example_user durch den Benutzernamen, example_password durch das Passwort und example_app_client_id durch die App-Client-ID.

Beispiel einer Antwort auf den „initiate-auth“-Befehl in AWS CLI

{
  "AuthenticationResult": {
    "AccessToken": "abCde1example",
    "IdToken": "abCde2example",
    "RefreshToken": "abCde3example",
    "TokenType": "Bearer",
    "ExpiresIn": 3600
  },
  "ChallengeParameters": {}
}

Erhalten von Autorisierungstoken mithilfe eines der AWS SDKs

Weitere Informationen findest du unter Integrieren der Amazon Cognito-Authentifizierung und -Autorisierung mit Web- und mobilen Apps.

Verwende Postman, um Autorisierungstoken zu erhalten

Verwende den OAuth 2.0-Autorisierungsmodus von der Postman-Website, um Autorisierungstoken abzurufen. Weitere Informationen findest du unter Warum erhalte ich nach dem Erstellen eines Lambda Authorizers einen API-Gateway-Fehler 401?

Konfigurieren benutzerdefinierter OAuth-2.0-Bereiche in Amazon-Cognito-Benutzerpools und Überprüfung der Bereiche in API Gateway

Ein Bereich bietet eine Ebene des Zugriffs, den eine App von einer Ressource anfordern kann. Amazon Cognito verfügt über integrierte OAuth-Bereiche, die so konfiguriert werden können, dass ein App-Client einem Benutzerpool zugeordnet wird. Weitere Informationen zu den integrierten Bereichen in Amazon Cognito findest du unter Terminologie der App-Client.

Benutzerdefinierte Bereiche können mit OAuth-2.0-Ressourcenservern verknüpft werden. Weitere Informationen zu Ressourcenservern findest du unter OAuth 2.0-Bereiche und API-Autorisierung mit Ressourcenservern.

Wenn du Amazon Cognito mit API Gateway verwendest, authentifiziert der Amazon-Cognito-Authorizer die Anfrage und sichert Ressourcen. Durch die Verwendung benutzerdefinierter Bereiche mit Amazon Cognito und API Gateway kannst du differenzierte Ebenen des Zugriffs auf den API-Ressourcen bereitstellen. Du hast auch mehr Kontrolle, wenn du Ressourcen verfügbar machst, um Zugriffstokenbereiche zu erhalten.

Konfigurieren eines Ressourcenservers und benutzerdefinierter OAuth-2.0-Bereiche in einem Benutzerpool

  1. Definiere den Ressourcenserver und die benutzerdefinierten Bereiche für den Benutzerpool.
  2. Gib als Ressourcenserver-Kennung den HTTPS-Endpunkt von API Gateway an, auf dem sich die Ressourcen befinden.
  3. Konfiguriere bei Bedarf einen Benutzerpool-App-Client und füge dann die benutzerdefinierten Bereiche zu den App-Client-Einstellungen hinzu.
    Hinweis: Der Name eines benutzerdefinierten Bereichs ist als ResourceServerIdentifier/ScopeName formatiert

Wenn eine Client-App in einem OAuth-2.0-Ablauf einen benutzerdefinierten Bereich anfordert, muss die Client-App die vollständige Kennung für den Bereich anfordern. Wenn die Ressourcenserver-Kennung beispielsweise https://myresourceserver.example.com und der Bereichsname resources.read lautet, muss die Client-App zur Laufzeit https://myresourceserver.example.com/resources.read anfordern.

Überprüfen der benutzerdefinierten OAuth-2.0-Bereiche in API Gateway

  1. Integriere eine REST-API in einen Amazon-Cognito-Benutzerpool.
  2. Wähle eine REST-API in der API-Gateway-Konsole aus.
  3. Wähle im Bereich Ressourcen einen Methodennamen aus.
  4. Wähle die Konfiguration Methodenanforderung aus.
  5. Wähle in der Dropdown-Liste Autorisierung die Option Cognito-Authorizer aus. Dadurch wird automatisch ein neues Feld mit dem Namen OAuth-Bereiche hinzugefügt.
  6. Gib im Feld OAuth-Bereiche die vollständige Kennung für den benutzerdefinierten Bereich in dem zuvor genannten Format ein. Zum Beispiel https://myresourceserver.example.com/resources.read.
  7. Speicher und stelle die API bereit.

**Verwende Postman oder CURL, um das Setup zu testen **

  1. Verwende einen der für den Client definierten OAuth-2.0-Abläufe, um das Zugriffstoken vom Amazon-Cognito-Autorisierungsserver abzurufen.
  2. Sende das empfangene Zugriffstoken als Autorisierungsheader in einer Anfrage an API Gateway.

Wenn alles stimmt und API Gateway das Zugriffstoken und den benutzerdefinierten Bereich validiert und verifiziert, erhältst du den OK-Antwortcode 200.

Ähnliche Informationen

Sicherer API-Zugriff mit Amazon-Cognito-Partneridentitä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 einem Jahr