Comment puis-je configurer un groupe d'utilisateurs Amazon Cognito comme mécanisme d'autorisation dans une API REST API Gateway ?

Date de la dernière mise à jour : 30/03/2021

Je souhaite configurer un groupe d'utilisateurs Amazon Cognito comme mécanisme d'autorisation dans mon API REST Amazon API Gateway. Comment dois-je procéder ?

Brève description

Il existe deux façons de configurer un groupe d'utilisateurs Amazon Cognito comme mécanisme d'autorisation dans une API REST API Gateway :

Pour l'autorisation, vous pouvez utiliser des jetons d'ID ou des jetons d'accès. Pour plus d'informations, consultez Utilisation des jetons avec des groupes d'utilisateurs.

Remarque : pour valider les enregistrements (et les enregistrements supplémentaires) dans les jetons d'accès et les jetons d'identificationémis par Amazon Cognito, utilisez un mécanisme d'autorisation Lambda. Si vous utilisez des jetons d'accès pour autoriser les appels de méthode API, veillez à autoriser l'accès à vos API en utilisant des portées personnalisées dans Amazon Cognito.

Pour plus d'informations, consultez Définition des serveurs de ressources de votre groupe d'utilisateurs et Création d'un groupe d'utilisateurs Amazon Cognito pour une API REST.

Solution

La procédure suivante montre comment créer un mécanisme d'autorisation COGNITO_USER_POOLS. L'exemple suppose que vous avez déjà créé deux choses :

Créer un mécanisme d'autorisation de groupes d'utilisateurs Cognito

Test du nouveau mécanisme d'autorisation COGNITO_USER_POOLS

Après avoir créé le mécanisme d'autorisation COGNITO_USER_POOLS, procédez comme suit :

1.    Dans la console API Gateway, cliquez sur le bouton Tester sous le nouveau mécanisme d'autorisation.

2.    Dans la fenêtre Tester, pour Autorisation, entrez un jeton d'ID depuis le nouveau groupe d'utilisateurs Amazon Cognito.

3.    Choisissez Tester.

Remarque : si le jeton d'ID est correct, le test renvoie le code de réponse 200. Les jetons d'ID incorrects renvoient le code de réponse 401.

Pour configurer un mécanisme d'autorisation COGNITO_USER_POOLS sur les méthodes

Pour plus d'informations, consultez section Pour configurer un mécanisme d'autorisation COGNITO_USER_POOLS sur les méthodes de Intégration d'une API REST à un groupe d'utilisateurs Amazon Cognito.

Obtention des jetons d'autorisation

Il existe quatre façons d'obtenir des jetons d'autorisation :

Remarque : si vous utilisez l'interface utilisateur Web hébergée pour Amazon Cognito et un type d'octroi de code d'autorisation, il peut être nécessaire d'échanger le code obtenu avec le point de terminaison du jeton.

Si vous utilisez un type d'octroi implicite, vous pouvez obtenir l'octroi à partir de l'URL de rappel. L'URL de rappel est ajoutée avec le jeton d'accès et le paramètre de jeton d'ID pour le flux implicite. Veillez à utiliser le jeton correct en fonction du type de jeton que vous avez choisi d'utiliser.

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

Pour utiliser le flux Octroi de code d'autorisation , procédez comme suit :

Remarque : le paramètre de type de réponse doit être « code » lors de l'utilisation du flux d'octroi de code d'autorisation.

1.    Envoyez une demande HTTP GET à l'URL suivante :

Important : remplacez <votre_domaine> par le nom de domaine de votre groupe d'utilisateurs. Remplacez <ID_de_votre_application_client> par l'ID client d'application de votre groupe d'utilisateurs. Remplacez <votre_URL_de_rappel> par votre URL de rappel.

https://<your_domain>/authorize?response_type=code&client_id=<your_app_client_id>&redirect_uri<your_callback_url>

Remarque : si vous incluez le paramètre fournisseur_d'identité, le point de terminaison vous redirige vers le fournisseur d'identité de fédération. Si le client d'application est configuré pour les groupes d'utilisateurs Amazon Cognito uniquement, le point de terminaison suivant vous redirige vers le point de terminaison /login :

https://<your_domain>/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>

2.    Connectez-vous à votre groupe d'utilisateurs ou à votre fournisseur d'identité fédérée. L'interface utilisateur vous redirige vers l'URL spécifiée dans le rappel du client d'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 demande HTTP POST au point de terminaison /oauth2/token. Pour plus d'informations, consultez Point de terminaison de jeton.

Exemple de requête HTTP POST

Remarque : l'exemple suivant de demande HTTP Post utilise le point de terminaison /oauth2/token suivant : https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&

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

Exemple de réponse à la demande HTTP Post

HTTP/1.1 200 OKContent-Type: application/json
{ 
"access_token":"eyJz9sdfsdfsdfsd", 
"refresh_token":"dn43ud8uj32nk2je", 
"id_token":"dmcxd329ujdmkemkd349r",
"token_type":"Bearer", 
"expires_in":3600
}

Pour utiliser le flux Octroi implicite, procédez comme suit :

Remarque : le paramètre de type de réponse doit être « token » lors de l'utilisation du flux d'octroi implicite.

1.    Envoyez une demande HTTP GET à l'URL suivante : 

Important : remplacez <votre_domaine> par le nom de domaine de votre groupe d'utilisateurs. Remplacez <votre_ID_de_client_d'application> par l'ID de client d'application de votre groupe d'utilisateurs. Remplacez <votre_URL_de_rappel> par votre URL de rappel.

https://<your_domain>/authorize?response_type=token&client_id=<your_app_client_id> &redirect_uri=<your_callback_url>

Remarque : si vous incluez le paramètre fournisseur_d'identité, le point de terminaison vous redirige vers le fournisseur d'identité de fédération. Si le client d'application est configuré pour les groupes d'utilisateurs Amazon Cognito uniquement, le point de terminaison suivant vous redirige vers le point de terminaison /login :

https://<your_domain>/login?response_type=token&client_id=<your_app_client_id> &redirect_uri=<your_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 vous redirige vers l'URL spécifiée dans le rappel du client d'application.

Remarque : l'URL de redirection inclut le jeton d'ID 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

Obtention des jetons d'autorisation à l'aide de l'interface de ligne de commande AWS (AWS CLI)

Remarque : si vous recevez des erreurs lors de l'exécution des commandes AWS CLI, utilisez la version AWS CLI la plus récente.

Exécutez la commande initiate-auth suivante à partir de l'interface de ligne de commande AWS (AWS CLI) :

Important : remplacez les valeurs suivantes par les entrées que vous utilisez : auth-flow, --client-idet --auth-parameters

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=testuser,PASSWORD=P@ssw0rd --client-id <app client id>

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

Response: {
"AuthenticationResult": {
"ExpiresIn": 3600,
"IdToken": "dmcxd329ujdmkemkd349r",
"RefreshToken": "dn43ud8uj32nk2je"",
"TokenType": "Bearer",
"AccessToken": "eyJz9sdfsdfsdfsd"
},
"ChallengeParameters":
            {} 
}

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

Pour plus d'informations, consultez 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 Comment résoudre les problèmes liés aux erreurs 401 Non autorisé d'un point de terminaison API REST API Gateway après avoir configuré un groupe d'utilisateurs Amazon Cognito