web-dev-qa-db-de.com

Rufen Sie den AWS-API-Gateway-Endpunkt mit dem API-Schlüssel über den Rest-Client POSTMAN an

Wir entwickeln eine Mobile/Web-App, für die wir aws lambda und dynamo db als Backend verwenden. Die eigenständigen Lambda-Funktionen funktionieren einwandfrei. Die Anrufe werden über ein API-Gateway weitergeleitet. Wir verwenden API-Schlüssel, um die darin enthaltenen Sicherheitsfunktionen zu nutzen. Zu Testzwecken versuchen wir, den API-Endpunkt über einen POSTMAN-Client eines Drittanbieters aufzurufen.

Die Anfragen sind vom Typ POST, aber egal was wir versuchen, wir bekommen

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

Ein Schnappschuss ist als Referenz beigefügt. (wenige Teile sind aus Sicherheitsgründen schattiert)

 enter image description here

  1. Wir sind nicht in der Lage, die Grundursache für das Verhalten zu ergründen.
  2. wenn dasselbe mit einem anderen Tool erreicht werden kann, schlagen Sie bitte vor.
30
Subham Tripathi

Durch die Arbeit mit AWS API Gateway bin ich in die gleiche Falle geraten, wie es scheint. Es gibt zwei Dinge, die dazu führen können, dass die berüchtigte 403 ("message": "Missing authentication token.")-Nachricht angezeigt wird:

  1. CloudFronts aggressives Caching

Ich stelle fest, dass Sie CloudFront zum Zwischenspeichern Ihrer API-AnfragenAntworten verwenden. CloudFront ist ein großartiges Tool - wenn Sie mich fragen, ist dies einer der besten Zwischenspeicherungsmechanismen. Beim Zwischenspeichern von Komponenten während der Entwicklung ist es jedoch sehr einfach, zwischengespeicherte Fehlernachrichten einzuholen. Dies kann hier der Fall sein, daher empfehle ich Ihnen, die API von CloudFront zu entfernen, bis sie vollständig funktionsfähig ist.

  1. Vergessen der erneuten Bereitstellung

Eine der Hauptfunktionen von API Gateway ist die Art und Weise, wie AWS mehrere Versionen von APIs verarbeitet. Nach der Bereitstellung können Sie sicher sein, dass Ihre API-Endpunkte/- sich nicht genau ändern - genau das, was Sie von einem API-Endpunkt erwarten.

Dies liegt an der Art und Weise, wie Endpunkte bereitgestellt werden. Jede in der AWS-Konsole vorgenommene Änderung muss für eine bestimmte Bereitstellung bereitgestellt werden, damit Live-Interaktion möglich ist. 

Wenn ich zum Beispiel meine API für die Live-Bereitstellung bereitstelle und alles gut funktioniert, ist das großartig. Ich kann jetzt mit den Tweak-Einstellungen in der AWS-Konsole fortfahren, um die API im Laufe der Zeit zu verbessern. Wenn ich mit den Änderungen zufrieden bin, kann ich sie erneut für eine andere API-Bereitstellung bereitstellen, sodass die aktuellen API-Benutzer ihre API nicht ändern müssen Interaktionsmethoden, bis eine Bereitstellung wieder in die Bereitstellung übernommen wird, an der sie gerade arbeiten.

Das Problem, das bei Ihnen möglicherweise auftritt, ist, dass Sie, obwohl Sie viele Änderungen an der AWS-Konsole vorgenommen haben, nicht erneut für die in Postman getestete Bereitstellung bereitgestellt haben.

Randnotiz:

Im Ressourcen-Editor können Sie Informationen zu den Antworttypen dieser Methode, deren Kopfzeilen und Inhaltstypen angeben. Hier können Sie aussagekräftigere Fehlermeldungen für Ihre Endpunkte bereitstellen.

25
Greg

Anscheinend haben Sie die Ressource nicht in Ihre URL eingefügt. Die URL sollte ungefähr so ​​aussehen:

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

aber deine ist mehr wie

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

Das Anfordern von API-Gateway-Pfaden, die nicht vorhanden sind, gibt die Nachricht "Missing Authentication Token" zurück.

Leider ist das ziemlich verwirrend. 

9
David Dehghan

In meinem Fall war es die Methode, die ich unterstützte, POST und ich habe versucht, GET im Browser. Ich versuchte es erneut mit einer POST in Postman und es hat funktioniert!

5
f01

Ich musste einen API-Nutzungsplan hinzufügen und diesen dann mit der API-Stufe verknüpfen.

Anscheinend ist dies die einzige Möglichkeit, den Schlüssel mit der API in AWS zu verknüpfen.

3
TimoSolo

Stellen Sie sicher, dass Sie die bereitgestellten Ressourcen aufrufen. Wenn nicht, werden Sie diesen verwirrenden API-Fehler anstelle von 404. Sie können prüfen, ob Ressourcen vorhanden sind, indem Sie die bereitgestellten "Stages" aufrufen.

So stellen Sie neue Ressourcen bereit: Gehen Sie zu Actions -> Deploy API.

 amz-api-gateway

Und um den korrekten Endpunkt zu erhalten, Gehen Sie zu "Stages" und klicken Sie auf die Ressource, die Sie anrufen möchten. Sie sehen den Link "URL aufrufen"

 resource-endpoint

Dann kannst du einfach den curl-Befehl ausführen, 

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

Hinweis: dev oben ist mein Künstlername.

0
prayagupd

Auf der Bühnen-Editor-Seite befindet sich eine linke Navigation mit dem Stufennamen. Wenn Sie dies erweitern, erhalten Sie einen Schrägstrich. Wenn Sie dies erweitern, erhalten Sie Ihre Ressource. Wenn Sie Ihre Ressource erweitern, wird Ihre Methode angezeigt, und wenn Sie auf die Methode klicken, wird der Link "URL aufrufen" angezeigt (der gleiche wie oben, jedoch mit angehängter Ressource). Dieser Aufruf der URL-Verknüpfung funktioniert, ruft die GET-Methode auf und gibt Ergebnisse zurück.

0
Anubhav Gupta