Comment configurer un groupe d'utilisateurs Amazon Cognito en tant qu'autorisateur sur une API REST d'API Gateway ?

Lecture de 9 minute(s)
0

Je souhaite configurer un groupe d'utilisateurs Amazon Cognito en tant qu'autorisateur sur mon API REST Amazon API Gateway.

Brève description

Il existe deux manières de configurer un groupe d'utilisateurs Amazon Cognito en tant qu'autorisateur sur une API REST d'API Gateway :

Vous pouvez utiliser des jetons d'identification ou des jetons d'accès pour l'autorisation. Les jetons d'accès peuvent autoriser l'accès aux API d’API Gateway à l'aide de portées personnalisées dans Amazon Cognito. Un autorisateur Lambda peut valider les demandes contenues dans les jetons d'identification et les jetons d'accès émis par Amazon Cognito.

Pour plus d'informations, consultez les rubriques suivantes :

Résolution

La procédure suivante montre comment créer un autorisateur COGNITO_USER_POOLS. L'exemple suppose que vous avez déjà créé deux éléments :

Création d'un autorisateur COGNITO_USER_POOLS

Pour plus d'informations, consultez la section Intégrer une API REST à un groupe d'utilisateurs Amazon Cognito. Suivez les instructions de la section Pour créer un autorisateur COGNITO_USER_POOLS à l'aide de la console API Gateway.

Testez le nouveau système d'autorisation COGNITO_USER_POOLS

Après avoir créé l'autorisateur COGNITO_USER_POOLS, procédez comme suit :

1.    Dans la console API Gateway, cliquez sur le bouton Test situé sous le nouvel autorisateur.

2.    Dans la fenêtre de test, pour l'autorisation, entrez un jeton d'identification provenant du nouveau groupe d'utilisateurs Amazon Cognito.

3.    Choisissez Test.

Remarque : Si le jeton d'identification est correct, le test renvoie un code de réponse 200. Un jeton d'identification incorrect renvoie un code de réponse 401.

Configurer l'autorisateur COGNITO_USER_POOLS sur une méthode d'API

Pour plus d'informations, consultez la section Intégrer une API REST à un groupe d'utilisateurs Amazon Cognito. Suivez les instructions de la section Pour configurer un autorisateur COGNITO_USER_POOLS sur les méthodes.

Obtenir des jetons d'autorisation

Il existe quatre manières d'obtenir des jetons d'autorisation :

Remarque : Configurez l'interface utilisateur hébergée par Amazon Cognito avec une attribution de code d'autorisation afin que votre application puisse échanger le code contre un point de terminaison à jetons.

Si vous utilisez un type de subvention implicite, vous pouvez obtenir l'autorisation à partir de l'URL de rappel. L'URL de rappel est ajoutée aux paramètres du jeton d'accès et du jeton d'identification pour le flux implicite. Assurez-vous d'utiliser le bon type de jeton.

Pour obtenir des jetons d'autorisation à l'aide de l'interface utilisateur hébergée pour Amazon Cognito

Pour utiliser le ](https://developer.amazon.com/docs/login-with-amazon/authorization-code-grant.html)flux d'octroi du code d'autorisation[, procédez comme suit :

Remarque : Le paramètre du type de réponse doit être « code » lorsque vous utilisez le flux d'octroi de code d'autorisation.

1.    Envoyez une demande GET pour obtenir un code d'autorisation :

Important : Remplacez example_domain par le nom de domaine de votre groupe d'utilisateurs. Remplacez example_app_client_id par l'ID client de l'application de votre groupe d'utilisateurs. Remplacez example_callback_url par votre URL de rappel.

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

Remarque : Incluez le paramètre identity_provider pour que le point de terminaison soit redirigé vers le fournisseur d'identité fédéré. Si le client de l'application est configuré uniquement pour les groupes d'utilisateurs Amazon Cognito, le point de terminaison suivant est redirigé vers le point de terminaison /login :

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

2.    Connectez-vous à votre groupe d'utilisateurs ou à votre fournisseur d'identité fédéré. L'interface utilisateur redirige vers l'URL spécifiée dans le rappel pour le client de l'application.

Important : L'URL de redirection inclut le code d'autorisation qui doit être échangé avec le point de terminaison du jeton pour obtenir des jetons valides.

3.    Envoyez une requête POST au point de terminaison /oauth2/token pour échanger un code d'autorisation contre des jetons. Pour plus d'informations, consultez la section point de terminaison du jeton.

Exemple de requête POST pour échanger un code d'autorisation contre des jetons

Remarque : L'exemple de requête POST utilise le point de terminaison /oauth2/token suivant : 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

Exemple de réponse à une requête POST

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

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

Pour utiliser le flux de subventions implicites, procédez comme suit :

Remarque : Le paramètre du type de réponse doit être « jeton » lorsque vous utilisez le flux de subventions implicites.

1.    Envoyez une requête GET pour obtenir une subvention implicite :

Important : Remplacez example_domain par le nom de domaine de votre groupe d'utilisateurs. Remplacez example_app_client_id par l'ID client de l'application de votre groupe d'utilisateurs. Remplacez example_callback_url par votre URL de rappel.

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

Remarque : Incluez le paramètre identity_provider pour que le point de terminaison soit redirigé vers le fournisseur d'identité fédéré. Si le client de l'application est configuré uniquement pour les groupes d'utilisateurs Amazon Cognito, le point de terminaison suivant est redirigé vers le point de terminaison /login :

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

2.    Connectez-vous à votre groupe d'utilisateurs avec le nom d'utilisateur et le mot de passe d'un utilisateur existant, ou créez un nouvel utilisateur pour vous connecter. L'interface utilisateur redirige vers l'URL spécifiée dans le rappel pour le client de l'application.

Remarque : L'URL de redirection inclut le jeton d'identification et le jeton d'accès.

Exemple d'URL de redirection

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

Pour obtenir des jetons d'autorisation à l'aide de l'AWS CLI

Remarque : Si des erreurs surviennent lors de l’exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d’AWS CLI.

Exécutez la commande initiate-auth de l'AWS CLI suivante pour obtenir des jetons d'autorisation :

Important : Remplacez example_user par votre nom d'utilisateur, example_password par votre mot de passe et example_app_client_id par l'ID client de votre application.

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

Exemple de réponse à la commande initiate-auth de l'AWS CLI

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

Pour obtenir des jetons d'autorisation à l'aide de l'un des kits SDK AWS

Pour plus d'informations, consultez la section Intégration d'Amazon Cognito aux applications Web et mobiles.

Pour obtenir des jetons d'autorisation à l'aide de Postman

Utilisez le mode d'autorisation OAuth 2.0 dans Postman pour obtenir des jetons d'autorisation. Pour plus d'informations, consultez la section Pourquoi est-ce que je reçois des erreurs non autorisées dans API Gateway 401 après la création d'un autorisateur Lambda ?

Configurer les étendues personnalisées OAuth 2.0 dans les groupes d'utilisateurs Amazon Cognito et vérifier les étendues dans API Gateway

Un champ d'application fournit un niveau d'accès qu'une application peut demander à une ressource. Amazon Cognito possède des étendues OAuth intégrées qui peuvent être configurées pour autoriser un client d'application associé à un groupe d'utilisateurs. Pour plus d'informations sur les étendues intégrées dans Amazon Cognito, consultez la section Terminologie des paramètres du client de l'application.

Des étendues personnalisées peuvent être associées aux serveurs de ressources OAuth 2.0. Pour plus d'informations sur les serveurs de ressources, consultez la section Définition des serveurs de ressources pour votre groupe d'utilisateurs.

Lorsque vous utilisez Amazon Cognito avec API Gateway, l'outil d'autorisation Amazon Cognito authentifie la demande et sécurise les ressources. L'utilisation d'étendues personnalisées avec Amazon Cognito et API Gateway vous permet de fournir des niveaux d'accès différenciés à vos ressources d'API. Vous avez également plus de contrôle lorsque vous exposez des ressources pour obtenir des étendues de jetons d'accès.

Configurer un serveur de ressources et des étendues personnalisées OAuth 2.0 dans un groupe d'utilisateurs

1.    Définissez le serveur de ressources et les étendues personnalisées pour votre groupe d'utilisateurs.
Pour l'identifiant du serveur de ressources, indiquez le point de terminaison HTTPS de la passerelle API où se trouvent vos ressources.

2.    Si nécessaire, configurez un client d'application de pool d'utilisateurs, puis ajoutez les étendues personnalisées dans les paramètres du client d'applications.

Remarque : Un nom d'étendue personnalisé est formaté sous la forme resourceServerIdentifier/scopeName

Lorsqu'une application cliente demande une étendue personnalisée dans un flux OAuth 2.0, elle doit demander l'identifiant complet de l'étendue. Par exemple, si l'identifiant du serveur de ressources est https://myresourceserver.example.com et que le nom de l'étendue est resources.read, l'application cliente doit demander https://myresourceserver.example.com/resources.read lors de l'exécution.

Vérifiez les étendues personnalisées OAuth 2.0 dans API Gateway

1.    Intégrez une API REST à un groupe d'utilisateurs Amazon Cognito.

2.    Dans la console API Gateway, choisissez une API REST.

3.    Dans le volet Ressources, choisissez un nom de méthode.

4.    Choisissez la configuration de la demande de méthode.

5.    Dans la liste déroulante Autorisation, choisissez Autorisateur Cognito. Cela ajoute automatiquement un nouveau champ nommé OAuth Scopes.

6.    Dans le champ OAuth Scopes, entrez l'identifiant complet de l'étendue personnalisée au format indiqué précédemment. Par exemple, https://myresourceserver.example.com/resources.read.

7.    Enregistrez et déployez l'API.

Testez la configuration à l'aide de Postman ou de CURL

1.    Obtenez le jeton d'accès auprès du serveur d'autorisation Amazon Cognito à l'aide de l'un des flux OAuth 2.0 définis pour le client.

2.    Envoyez le jeton d'accès que vous avez reçu en tant qu'en-tête d'autorisation dans une demande à API Gateway.

3.    Si tout fonctionne correctement et qu'API Gateway valide et vérifie le jeton d'accès et l'étendue personnalisée, vous obtenez une réponse 200 OK.

Informations connexes

Accès sécurisé aux API avec Amazon Cognito Federated Identities, les groupes d'utilisateurs Amazon Cognito et Amazon API Gateway

Comment puis-je décoder et vérifier la signature d'un jeton Web JSON Amazon Cognito ?

Contrôlez l'accès à une API REST en utilisant les groupes d'utilisateurs Amazon Cognito comme autorisateur

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans