En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

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 utiliser des portées personnalisées dans Amazon Cognito pour accorder un accès aux API d’API Gateway. Un mécanisme d’autorisation Lambda peut valider les requêtes contenues dans les jetons d'identification et les jetons d'accès émis par Amazon Cognito.

Pour en savoir plus, consultez les rubriques suivantes :

Résolution

Prérequis :

Création d'un mécanisme d’autorisation COGNITO_USER_POOLS

Pour en savoir plus, consultez la page Intégration d’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.

Test du nouveau système d'autorisation COGNITO_USER_POOLS

Procédez comme suit :

  1. Ouvrez la console API Gateway.
  2. Sous le nouveau mécanisme d’autorisation, cliquez sur le bouton Tester.
  3. Dans la fenêtre Tester, dans Autorisation, saisissez un jeton d'identification provenant du nouveau groupe d'utilisateurs Amazon Cognito.
  4. Choisissez Tester.
    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 en savoir plus, consultez la page Intégration d’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 : vous devez configurer l'interface utilisateur hébergée par Amazon Cognito à l’aide d’un code d'octroi, afin que votre application puisse échanger le code contre un point de terminaison à jetons.

Si vous utilisez un type d'octroi implicite, vous pouvez l'obtenir à 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.

Utilisation de l'interface utilisateur hébergée d’Amazon Cognito pour obtenir des jetons d'autorisation

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

Pour utiliser le flux d'octroi du code d'autorisation, procédez comme suit :

  1. Envoyez une requête GET pour obtenir un code d'octroi :

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

    Remarque : 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. 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 en savoir plus, consultez la page Point de terminaison de 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
}

Remarque : lorsque vous utilisez le flux d’octroi implicite, le paramètre du type de réponse doit être « token ».

Pour utiliser le flux d’octroi implicite, procédez comme suit :

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

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

    Remarque : 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. 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

Utilisation de l'AWS CLI pour obtenir des jetons d'autorisation

**Remarque :**Si des erreurs surviennent lorsque vous exécutez des commandes AWS CLI, consultez l’article Résoudre les erreurs AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

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

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

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

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

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

Utilisation de l'un des kits SDK AWS pour obtenir des jetons d'autorisation

Pour en savoir plus, consultez la page Intégration de l'authentification et de l'autorisation Amazon Cognito aux applications Web et mobiles.

Utilisation de Postman pour obtenir des jetons d'autorisation

Utilisez le mode d'autorisation OAuth 2.0, disponible sur le site Web de Postman, pour obtenir des jetons d'autorisation. Pour en savoir plus, consultez la page Pourquoi des erreurs « 401 Unauthorized » surviennent-elles dans API Gateway après la création d’un mécanisme d'autorisation 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 portées OAuth intégrées qui peuvent être configurées pour autoriser un client d'application associé à un groupe d'utilisateurs. Pour en savoir plus sur les portées intégrées dans Amazon Cognito, consultez la page Termes du client d’application.

Des portées personnalisées peuvent être associées aux serveurs de ressources OAuth 2.0. Pour en savoir plus sur les serveurs de ressources, consultez la page Portées OAuth 2.0 et autorisation des API avec les serveurs de ressources.

Lorsque vous utilisez Amazon Cognito avec API Gateway, le mécanisme d’autorisation Amazon Cognito authentifie la requête et garantit les ressources. L'utilisation de portées 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 bénéficiez également de davantage de contrôle lorsque vous exposez des ressources pour obtenir des portées de jetons d'accès.

Configuration d’un serveur de ressources et de portées personnalisées OAuth 2.0 dans un groupe d'utilisateurs

  1. Définissez le serveur de ressources et les portées personnalisées pour votre groupe d'utilisateurs.
  2. Dans l'identifiant du serveur de ressources, indiquez le point de terminaison HTTPS de l’instance API Gateway où se trouvent vos ressources.
  3. Si nécessaire, configurez un client d'application de groupe d’utilisateurs, puis ajoutez les portées 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 portée personnalisée dans un flux OAuth 2.0, elle doit demander l'identifiant complet de la portée. Par exemple, si l'identifiant du serveur de ressources est https://myresourceserver.example.com et que le nom de la portée est resources.read, l'application cliente doit demander https://myresourceserver.example.com/resources.read lors de l'exécution.

Vérification des portées 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 Requête de méthode.
  5. Dans la liste déroulante Autorisation, choisissez Mécanisme d'autorisation Cognito. Cette action ajoute automatiquement un nouveau champ nommé Règles OAuth autorisées.
  6. Dans le champ des Règles OAuth autorisées, entrez l'identifiant complet de la portée personnalisée, au format indiqué précédemment. Par exemple, https://myresourceserver.example.com/resources.read.
  7. Enregistrez et déployez l'API.

Utilisation de Postman ou CURL pour tester la configuration

  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 requête à API Gateway.

Si tout fonctionne correctement et qu'API Gateway valide et vérifie le jeton d'accès et la portée 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 7 mois