Comment résoudre les erreurs « 401 Non autorisé » d'un point de terminaison 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'autorisation COGNITO_USER_POOLS dans mon API REST Amazon API Gateway. Maintenant, j'obtiens des erreurs « 401 Non autorisé » dans la réponse de l'API. Comment puis-je corriger ces erreurs ?

Solution

Remarque : API Gateway peut renvoyer les erreurs 401 non autorisé pour diverses raisons. La procédure suivante explique comment résoudre les erreurs 401 liées aux mécanismes d'autorisation COGNITO_USER_POOLS uniquement.

Vérifiez la configuration de l'agent d'autorisation dans la méthode API.

1.    Dans la console API Gateway, dans le volet API, choisissez le nom de votre API.

2.    Dans le volet de navigation, sous votre API, choisissez Authorizers (Mécanismes d'autorisation).

3.    Vérifiez la configuration du mécanisme d'autorisation et que ce qui suit est vrai :
L'ID du pool d'utilisateurs correspond à l'émetteur du jeton.
L'API est déployée.
Le mécanisme d'autorisation fonctionne en mode Test.

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

Remarque : si vous ne pouvez pas appeler votre API après avoir vérifié la configuration du mécanisme d'autorisation dans la méthode API, vérifiez la validité du jeton de sécurité.

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

Lorsque vous vérifiez 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 pool d'utilisateurs Amazon Cognito configuré dans l'API.
  • Les valeurs de Jeton d'ID et la chaîne de 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, assurez-vous qu'aucun espace n'a été ajouté dans les jetons lorsqu'ils ont été envoyés dans l'en-tête de demande.

Important : si aucune portée supplémentaire n'est configurée dans la méthode API Gateway, assurez-vous que vous utilisez un jeton d'IDvalide. Si des portées supplémentaires sont configurées dans la méthode API Gateway, vérifiez que vous utilisez un jeton d'accès valide. Pour plus d'informations, consultez Intégrer une API REST à un groupe d'utilisateurs Amazon Cognito et utilisation des portées personnalisées Amazon Cognito dans API Gateway.

Exemple de charge utile de 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 d'enregistrement suivants dans l'exemple de charge utile 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 : l'enregistrement exp est représenté en secondes de l'heure Unix (1970-01-01T0:0:0Z) jusqu'à la date et à l'heure où le jeton expire 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 :

Si vous utilisez Postman pour appeler l'API

Utilisez le mode d'autorisation OAuth 2.0 pour utiliser directement les jetons Amazon Cognito. Lorsque vous configurez le mode d'autorisation OAuth 2.0, vérifiez que ce qui suit est vrai :

  • Le type d'octroi est un code d'autorisation ou une autorisation implicite, selon votre configuration sur le client d'applications du groupe d'utilisateurs.
  • 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

Important : remplacez mydomain par le nom de domaine que vous utilisez pour configurer votre groupe d'utilisateurs. Assurez-vous de saisir la bonne région AWS dans laquelle votre API est hébergée.

  • L'ID client est l'ID de client d'application du groupe d'utilisateurs.
    Remarque : si un secret client est associé au client d'applications du groupe d'utilisateurs, veillez à spécifier le secret client dans l'onglet Autorisation du champ Secret du client. Si aucun secret client n'est associé au client d'application du groupe d'utilisateurs, laissez vide le champ Secret client.
  • Portée est configurée comme openid.
    Remarque : la portée openid doit être également autorisée sur le client d'application du pool d'utilisateurs.
  • Le bon point de terminaison du jeton de pool d'utilisateurs Amazon Cognito est entré pour le flux de code d'autorisation.

Exemple de point de terminaison de jeton de groupe d'utilisateurs Amazon Cognito

https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token

Remarque : Postman peut ne pas transmettre le type de contenu requis au point de terminaison du jeton, ce qui peut entraîner une erreur 405. Cependant, vous ne recevez pas l'erreur 504 lorsque vous utilisez un flux implicite.


Informations connexes

Sécuriser l'accès aux API avec les identités fédérées Amazon Cognito, les pools 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ôle de l'accès à une API REST à l'aide de groupes d'utilisateurs Amazon Cognito comme mécanisme d'autorisation

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