web-dev-qa-db-fra.com

Jeton d'authentification manquant lors de l'accès à API Gateway?

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.

21
Umer

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

12
saddam

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:

 enter image description here

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.

4
Nicholas

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:

  1. 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',
    });
    
4
theJasonHall

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.

3
Bob Kinney

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

0
Geetanshu Gulati