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é)
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.")
:
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.
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.
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
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.
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é!
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.
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
Et pour obtenir le bon terminal, Allez à "Étapes" et cliquez sur la ressource que vous souhaitez appeler. Vous voyez le lien "invoquer l'URL"
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.} _
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.