Passer au contenu

Comment résoudre les erreurs « 401 Unauthorized » provenant d'un point de terminaison de l'API REST API Gateway après avoir configuré un groupe d'utilisateurs Amazon Cognito ?

Lecture de 5 minute(s)
0

J'ai configuré mon groupe d'utilisateurs Amazon Cognito en tant qu'autorisateur COGNITO_USER_POOLS sur mon API REST Amazon API Gateway. J'obtiens des erreurs « 401 Unauthorized » dans la réponse de l'API.

Résolution

Remarque : API Gateway peut renvoyer des erreurs 401 Unauthorized pour diverses raisons. La procédure suivante montre comment résoudre uniquement les erreurs 401 liées aux mécanismes d’autorisation COGNITO_USER_POOLS.

Vérifier la configuration du mécanisme d'autorisation sur la méthode API

Procédez comme suit :

  1. Ouvrez la console API Gateway.
  2. Dans le volet de navigation, choisissez API, puis choisissez votre API.
  3. Dans le volet de navigation, sous votre API, choisissez Mécanismes d’autorisation.
  4. Vérifiez la configuration du mécanisme d’autorisation et confirmez que ce qui suit est vrai :
    L'ID du groupe d'utilisateurs correspond à l'émetteur du jeton.
    Vous avez déployé l'API.
    Le mécanisme d'autorisation fonctionne en mode test pour les jetons d'identification.
    Remarque : Il n’est pas possible d’utiliser cette fonctionnalité pour tester les jetons d'accès.

Pour plus d'informations, consultez la section Intégrer une API REST à un groupe d'utilisateurs Amazon Cognito.

Remarque : Si vous ne parvenez pas à invoquer votre API après avoir confirmé la configuration du mécanisme d’autorisation, vérifiez la validité du jeton de sécurité.

Vérifier la validité du jeton de sécurité

Pour vérifier la validité du jeton de sécurité, vérifiez que ce qui suit est vrai :

  • Le jeton de sécurité n'a pas expiré.
  • L'émetteur du jeton de sécurité correspond au groupe d'utilisateurs Amazon Cognito configuré sur l'API.
  • Les valeurs de chaîne du jeton d'identification et du jeton d'accès sont valides.
    Remarque : Si les valeurs de chaîne sont valides, vous pouvez décoder les jetons. Si les jetons ne sont pas valides, révisez-les. Assurez-vous que les jetons ne comportent aucun espace supplémentaire lors de leur passage dans l'en-tête de requête.

Important : Si vous n'avez configuré aucune portée sur la méthode API Gateway, assurez-vous d'utiliser un jeton d'identification valide. Si vous configurez des portées supplémentaires sur la méthode API Gateway, assurez-vous d'utiliser un jeton d’accès valide. Pour plus d’informations, consultez la section Comment autoriser l'accès aux API API Gateway à l'aide de portées personnalisées dans Amazon Cognito ?

Exemple de données utiles d'un jeton de sécurité :

Id token payload: {
 "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
 "aud": "xxxxxxxxxxxxexample",
 "email_verified": true,
 "token_use": "id",
 "auth_time": 1500009400,
 "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
 "cognito:username": "janedoe",
 "exp": 1500013000,
 "given_name": "Jane",
 "iat": 1500009400,
 "email": "janedoe@example.com"
 }
Access token payload:
{
    "auth_time": 1500009400,
    "exp": 1500013000,
    "iat": 1500009400,
    "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
    "scope": "aws.cognito.signin.user.admin",
    "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "token_use": "access",
    "username": "janedoe@example.com"
}

Notez les noms de réclamations suivants dans l'exemple de données utiles du jeton de sécurité :

  • token_use indique le type de jeton (ID ou jeton d'accès).
  • exp indique l’heure d'expiration du jeton.
    Remarque : La valeur exp est exprimée en secondes depuis l'époque Unix (1970-01-01T 0:0:0 Z) jusqu'à la date et à l'heure d'expiration du jeton en temps universel coordonné (UTC).
  • auth_time indique quand le jeton a été émis.
  • iss indique le domaine du groupe d'utilisateurs qui a émis les jetons.

Important : Le jeton que vous utilisez doit correspondre au groupe d'utilisateurs que vous configurez sur la méthode API Gateway. Si vous ne pouvez pas appeler l'API, vérifiez que vous utilisez correctement l'en-tête d'autorisation. Si vous recevez des erreurs 401, assurez-vous que vos politiques de ressources ne bloquent pas la requête.

Si vous utilisez Postman pour invoquer l'API

Pour utiliser directement les jetons Amazon Cognito, utilisez le mode d'autorisation OAuth 2.0. Pour plus d'informations, consultez la page Authentification et autorisation de l'API dans Postman sur le site Web de Postman.

Lorsque vous configurez le mode d'autorisation OAuth 2.0, vérifiez que ce qui suit est vrai :

  • L'option Type d’octroi est définie sur Code d'autorisation ou Autorisation implicite.
  • L'URL de rappel correspond à l'URL redirigée configurée sur le client d'application du groupe d'utilisateurs.
  • L'URL d'authentification est au format suivant : https://mydomain.auth.us-east-1.amazoncognito.com/login
    Remarque : Remplacez mydomain par le nom de domaine que vous utilisez pour configurer votre groupe d'utilisateurs. Assurez-vous de saisir la région AWS adéquate dans laquelle vous hébergez votre API.
  • L'ID client est l'ID du client d'application du groupe d'utilisateurs.
    Remarque : Si vous associez un secret de client au client d'application du groupe d'utilisateurs, spécifiez-le dans l'onglet Autorisation. Si aucun secret de client n'est associé au client d'application du groupe d'utilisateurs, laissez le champ Secret du client vide.
  • La Portée est configurée comme OpenID.
    Remarque : Vous devez autoriser la portée Openid sur le client d'application du groupe d'utilisateurs.
  • Pour Flux de code d'autorisation, saisissez le point de terminaison correct de jeton du groupe d'utilisateurs Amazon Cognito.
    Exemple de point de terminaison de jeton de groupe d'utilisateurs Amazon Cognito :
    https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token

Remarque : Si le point de terminaison de jeton ne prend pas en charge le type de contenu, Postman ne peut pas transmettre le contenu requis et entraîne une erreur 405. Pour éviter ce problème, utilisez le flux implicite. Pour plus d'informations, consultez la section Octrois OAuth 2.0.

Informations connexes

Accès sécurisé aux API avec les identités fédérées Amazon Cognito, les groupes d'utilisateurs Amazon Cognito et API Gateway

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

Contrôler l'accès à une API REST en utilisant les groupes d'utilisateurs Amazon Cognito comme mécanisme d’autorisation