web-dev-qa-db-fra.com

Appels vers le point de terminaison de la passerelle AWS api avec la clé api à l'aide du client de repos POSTMAN

Nous développons actuellement une application mobile/Web pour laquelle nous utilisons aws lambda et dynamo db. Les fonctions autonomes lambda fonctionnent parfaitement. Les appels sont acheminés via la passerelle API. Nous utilisons des clés API pour tirer parti des fonctions de sécurité fournies. À des fins de test, nous essayons d'appeler le point final de l'API par le biais d'un client de repos tiers, POSTMAN.

Les demandes sont de type POST mais quoi que nous essayions, nous obtenons

403 ("message": "Missing authentication token.")

Un instantané est joint pour référence. (quelques portions sont ombrées pour des raisons de sécurité)

 enter image description here

  1. Nous sommes incapables de comprendre la cause du comportement.
  2. si la même chose peut être obtenue avec un autre outil, alors suggérez-le.
30
Subham Tripathi

En travaillant avec AWS API Gateway, je suis tombé dans le même piège que vous semblez l'être. Il y a deux choses qui peuvent provoquer l'affichage du fameux message 403 ("message": "Missing authentication token."):

  1. La mise en cache agressive de CloudFront

Je remarque que vous utilisez CloudFront pour mettre en cache vos requêtes/réponses d'API. CloudFront est un excellent outil - l'un des meilleurs mécanismes de mise en cache si vous me le demandez - mais lors de la mise en cache de choses au cours du développement, il est très facile de se laisser prendre aux messages d'erreur mis en cache. C'est peut-être le cas ici. Mon conseil est donc de supprimer l'API de CloudFront jusqu'à ce que tout fonctionne parfaitement.

  1. Oublier de redéployer

L'une des principales fonctionnalités d'API Gateway est la manière dont AWS gère plusieurs versions d'API. Une fois déployé, vous pouvez être sûr de savoir que vos points de terminaison d'API ne changeront pas - exactement ce que vous souhaitez d'un point de terminaison d'API.

Cela est dû à la façon dont les points de terminaison sont déployés. Chaque modification apportée dans la console AWS doit être déployée sur un déploiement spécifique pour pouvoir être utilisée en direct. 

Par exemple, si je déploie mon API sur le déploiement "en direct" et que tout fonctionne correctement, c'est génial. Je peux maintenant continuer à modifier les paramètres de la console AWS pour améliorer l'API au fil du temps. Lorsque je suis satisfait de ce que j'ai modifié, je peux le déployer à nouveau vers un autre déploiement d'API, ce qui signifie que les utilisateurs actuels de l'API n'auront pas à changer leur méthodes d’interaction jusqu’à ce qu’un déploiement soit effectué sur le déploiement sur lequel ils travaillent.

Le problème que vous pouvez rencontrer est que, même si vous avez apporté de nombreuses modifications à la console AWS, il est possible que vous ne soyez pas redéployé sur le déploiement que vous testez dans Postman.

Sidenote:

Dans le panneau Editeur de ressources, vous pouvez fournir des informations sur les types de réponse de cette méthode, leurs en-têtes et leurs types de contenu. Ici, il est possible de fournir des messages d'erreur plus significatifs à vos points de terminaison.

25
Greg

Il semble que vous n'ayez pas ajouté la ressource dans votre URL. L'URL devrait être quelque chose comme:

https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource

mais le tien est plus comme

https://my-api-id.execute-api.region-id.amazonaws.com/test
23
noo

Demander des chemins d'accès API Gateway qui n'y sont pas renvoyés renvoie le message "message: jeton d'authentification manquant".

Malheureusement, c'est assez déroutant. 

9
David Dehghan

Dans mon cas, c’est que la méthode que j’ai prise en charge est POST et j’ai essayé de la GET dans le navigateur. J'ai retenté en faisant un POST dans Postman et cela a fonctionné!

5
f01

J'ai dû ajouter un plan d'utilisation de l'API, puis le lier à l'étape de l'API.

Cela semble être le seul moyen de lier la clé à l'API dans AWS.

3
TimoSolo

Assurez-vous d'appeler les ressources déployées. Si ce n'est pas le cas, cette erreur d'API déroutante à la place de 404. Vous pouvez vérifier si des ressources existent en allant dans "Étapes" déployées.

Pour déployer de nouvelles ressources: Go to Actions -> Deploy API

 amz-api-gateway

Et pour obtenir le bon terminal, Allez à "Étapes" et cliquez sur la ressource que vous souhaitez appeler. Vous voyez le lien "invoquer l'URL"

 resource-endpoint

Ensuite, vous pouvez simplement lancer la commande curl, 

curl --request GET https://88upd88you.execute-api.us-west-2.amazonaws.com/dev/hello

_ {Remarque: dev ci-dessus est mon nom de scène.} _

0
prayagupd

Sur la page de l'éditeur de scène, il y a un nav gauche avec le nom de la scène. Si vous développez cela, vous obtenez une barre oblique; si vous développez cela, vous obtenez votre ressource. Si vous développez votre ressource, vous obtenez votre méthode et si vous cliquez sur la méthode, vous obtenez un lien "Invoke URL" (qui est identique à ce qui précède, mais avec la ressource ajoutée). Ce lien d’appel d’URL fonctionne en appelant la méthode GET et en renvoyant les résultats.

0
Anubhav Gupta