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)
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:
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.
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.
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
Das Anfordern von API-Gateway-Pfaden, die nicht vorhanden sind, gibt die Nachricht "Missing Authentication Token" zurück.
Leider ist das ziemlich verwirrend.
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!
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.
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
.
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"
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.
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.