J'essaie d'appeler une fonction Lambda via AWS API Gateway. Lorsque je mentionne le type d'authentification NONE, cela fonctionne bien, mais l'API devient publique et toute personne ayant un URL peut accéder à mon API. utilisateur mais obtenir cette erreur:
{message: "Jeton d'authentification manquant"}
Je ne sais pas ce qui me manque ici.
Je pense que vous essayez directement d'accéder au lien d'API. Cela ne fonctionnera pas car l'API est sécurisée à l'aide du rôle IAM et vous devez fournir une authentification AWS, c'est-à-dire une clé d'accès et une clé secrète.
Utilisez l'extension Postman Chrome pour tester votre API: http://docs.aws.Amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html
J'ai perdu du temps pour une raison idiote:
Lorsque vous créez une étape, le lien affiché ne contient pas la partie ressource de l'URL:
API URL:https://1111.execute-api.us-east-1.amazonaws.com/dev
API + URL ressourcehttps://1111.execute-api.us-east-1.amazonaws.com/dev/get-list
Le / get-list était manquant
Et bien sûr, vous devez vérifier que la configuration de la méthode ressemble à ceci:
Je viens d'avoir le même problème et il semble qu'il affiche également ce message si la ressource est introuvable.
Dans mon cas, j'avais mis à jour l'API, mais j'avais oublié de redéployer. Le problème a été résolu après le déploiement de l'API mise à jour sur mon étape.
Trouvé ceci dans la documentation:
Si l'autorisation AWS_IAM était utilisée, vous signeriez la demande à l'aide des protocoles Signature Version 4.
Demande de signature avec Signature Version 4
Vous pouvez également générer un SDK pour votre API.
Comment générer un SDK pour une API dans API Gateway
Une fois que vous avez généré le SDK pour la plate-forme de votre choix, l'étape 6 indique que si vous utilisez les informations d'identification AWS, la demande adressée à l'API sera signée:
Pour initialiser le SDK généré par la passerelle API avec les informations d'identification AWS, utilisez un code similaire à celui-ci. Si vous utilisez les informations d'identification AWS, toutes les demandes de l'API seront signées. Cela signifie que vous devez définir les en-têtes d'acceptation CORS appropriés pour chaque demande:
var apigClient = apigClientFactory.newClient({
accessKey: 'ACCESS_KEY',
secretKey: 'SECRET_KEY',
});
Si vous activez l'authentification AWS_IAM, vous devez signer votre demande avec les informations d'identification AWS à l'aide de AWS Signature Version 4 .
Note: la connexion à la console AWS ne signe pas automatiquement les demandes de votre navigateur auprès de votre API.
Tout d’abord, vérifiez si l’API que vous avez créée dans la fonction lamda est enregistrée auprès de votre projet AWS ou non. Pour cela, accédez à la passerelle API dans votre console AWS. S'il n'est pas enregistré, enregistrez-le. C'est la cause principale de ce problème.
Vous pouvez même voir dans votre fichier aws.export.js qu'il existe des chemins correspondant à votre API ['/items']
.
Votre API doit y être présente, sinon elle n’ajoutera pas le jeton de sécurité aux requêtes. Il suffit de l'enregistrer dans votre projet cloud-logic dans votre console pour cela.
Si c'est le cas, utilisez la solution mentionnée ci-dessus
http://docs.aws.Amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html