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:

Sie können für die Autorisierung entweder ID-Token oder Zugriffstoken verwenden. Zugriffstoken können Zugriff auf APIs in API-Gateway mithilfe benutzerdefinierter Bereiche in Amazon Cognito autorisieren. Ein Lambda Authorizer kann die von Amazon Cognito ausgegebenen ID-Token und Zugriffstoken validieren.

Weitere Informationen finden Sie unter:

Behebung

Das folgende Verfahren zeigt, wie Sie einen COGNITO_USER_POOLS-Authorizer erstellen. Das Beispiel geht davon aus, dass Sie Folgendes bereits erstellt haben:

Erstellen eines COGNITO_USER_POOLS-Authorizer

Weitere Informationen finden Sie unter Integration einer REST-API in einen Amazon-Cognito-Benutzerpool. Folgen Sie den Anweisungen im Abschnitt So erstellen Sie einen COGNITO_USER_POOLS-Authorizer mithilfe der API-Gateway-Konsole.

Testen des neuen COGNITO_USER_POOLS-Authorizers

Nachdem Sie den COGNITO_USER_POOLS-Authorizer erstellt haben, gehen Sie wie folgt vor:

1.    Wählen Sie in der API-Gateway-Konsole die Schaltfläche Test unter dem neuen Authorizer.

2.    Geben Sie im Fenster Test für Autorisierung ein ID-Token aus dem neuen Amazon-Cognito-Benutzerpool ein.

3.    Wählen Sie Test 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 finden Sie unter Integration einer REST-API in einen Amazon-Cognito-Benutzerpool. Folgen Sie den Anweisungen im Abschnitt So konfigurieren Sie einen COGNITO_USER_POOLS-Authorizer mit Methoden.

Anfordern von Autorisierungstoken

Es gibt vier Möglichkeiten, Autorisierungstoken zu erhalten:

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

Wenn Sie einen impliziten Gewährungstyp verwenden, können Sie 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. Stellen Sie sicher, dass Sie den richtigen Tokentyp verwenden.

So erhält man Autorisierungstoken mithilfe der gehosteten Benutzeroberfläche von Amazon Cognito

Gehen Sie wie folgt vor, um den Ablauf der Autorisierungscode-Gewährung zu verwenden:

Hinweis: Der Antworttyp-Parameter muss „Code“ lauten, wenn Sie den Ablauf der Autorisierungscode-Gewährung verwenden.

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

Wichtig: Ersetzen Sie example_domain durch den Domainnamen Ihres Benutzerpools. Ersetzen Sie example_app_client_id durch die App-Client-ID Ihres Benutzerpools. Ersetzen Sie example_callback_url durch Ihre Rückruf-URL.

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

Hinweis: Fügen Sie 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.    Melden Sie sich bei Ihrem Benutzerpool oder Ihrem Partneridentitätsanbieter an. Die Benutzeroberfläche leitet zu der URL weiter, die im Rückruf für den App-Client angegeben ist.

Wichtig: Die Weiterleitungs-URL enthält den Autorisierungscode, der mit dem Token-Endpunkt ausgetauscht werden muss, um gültige Token zu erhalten.

3.    Senden Sie eine POST-Anfrage an den Endpunkt /oauth2/token, um einen Autorisierungscode gegen Token auszutauschen. Weitere Informationen finden Sie 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
}

Gehen Sie wie folgt vor, um den Ablauf für eine implizite Gewährung zu verwenden:

Hinweis: Der Antworttyp-Parameter muss „Token“ lauten, wenn der Ablauf für eine implizite Gewährung verwendet wird.

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

Wichtig: Ersetzen Sie example_domain durch den Domainnamen Ihres Benutzerpools. Ersetzen Sie example_app_client_id durch die App-Client-ID Ihres Benutzerpools. Ersetzen Sie example_callback_url durch Ihre Rückruf-URL.

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

Hinweis: Fügen Sie 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.    Melden Sie sich mit dem Benutzernamen und Passwort eines bestehenden Benutzers bei Ihrem Benutzerpool an oder erstellen Sie 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

Erhalten von Autorisierungstoken mithilfe der AWS CLI

Hinweis: Wenn beim Ausführen von AWS-CLI-Befehlen Fehler auftreten, stellen Sie sicher, dass Sie die neueste Version von AWS CLI verwenden.

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

Wichtig: Ersetzen Sie example_user durch Ihren Benutzernamen, example_password durch Ihr Passwort und example_app_client_id durch Ihre App-Client-ID.

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=example_user,PASSWORD=example_password --client_id example_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 finden Sie unter Integrieren von Amazon Cognito in Web- und mobile Apps.

Erhalten von Autorisierungstoken mit Postman

Verwenden Sie den Autorisierungsmodus OAuth 2.0 in Postman, um Autorisierungstoken zu erhalten. Weitere Informationen finden Sie unter Warum erhalte ich nach der Erstellung eines Lambda Authorizers den Fehler „API Gateway 401 nicht autorisiert“?

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 finden Sie unter Terminologie der App-Client-Einstellungen.

Benutzerdefinierte Bereiche können mit OAuth-2.0-Ressourcenservern verknüpft werden. Weitere Informationen zu Ressourcenservern finden Sie unter Definieren von Ressourcenservern für Ihren Benutzerpool.

Wenn Sie Amazon Cognito mit API Gateway verwenden, authentifiziert der Amazon-Cognito-Authorizer die Anfrage und sichert Ressourcen. Durch die Verwendung benutzerdefinierter Bereiche mit Amazon Cognito und API Gateway können Sie differenzierte Ebenen des Zugriffs auf Ihre API-Ressourcen bereitstellen. Sie haben auch mehr Kontrolle, wenn Sie Ressourcen verfügbar machen, um Zugriffstokenbereiche zu erhalten.

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

1.    Definieren Sie den Ressourcenserver und die benutzerdefinierten Bereiche für Ihren Benutzerpool.
Geben Sie als Ressourcenserver-Kennung den HTTPS-Endpunkt von API Gateway an, auf dem sich Ihre Ressourcen befinden.

2.    Konfigurieren Sie bei Bedarf einen Benutzerpool-App-Client und fügen Sie 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.    Integrieren Sie eine REST-API in einen Amazon-Cognito-Benutzerpool.

2.    Wählen Sie eine REST-API in der API-Gateway-Konsole aus.

3.    Wählen Sie im Bereich Ressourcen einen Methodennamen aus.

4.    Wählen Sie die Konfiguration Methodenanforderung aus.

5.    Wählen Sie in der Dropdown-Liste Autorisierung die Option Cognito-Authorizer aus. Dadurch wird automatisch ein neues Feld mit dem Namen OAuth-Bereiche hinzugefügt.

6.    Geben Sie 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.    Speichern Sie und stellen Sie die API bereit.

Testen des Setups mit Postman oder CURL

1.    Verwenden Sie einen der für den Client definierten OAuth-2.0-Abläufe, um das Zugriffstoken vom Amazon-Cognito-Autorisierungsserver abzurufen.

2.    Senden Sie das empfangene Zugriffstoken als Autorisierungsheader in einer Anfrage an API Gateway.

3.    Wenn alles stimmt und API Gateway das Zugriffstoken und den benutzerdefinierten Bereich validiert und verifiziert, erhalten Sie den OK-Antwortcode 200.

Relevante Informationen

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

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

Steuern des Zugriffs auf eine REST-API mithilfe von Amazon-Cognito-Benutzerpools als Authorizer

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren