2016-07-26 11 views
8

Von API-Gateway habe ich eine für meine API mit Lambda-Funktion in Python erstellt. Das API-Gateway übergibt das eingehende Authentifizierungs-Token mithilfe eines Headers, den ich konfiguriere (method.request.header.Authorization). Allerdings brauche ich auch die anderen Header der ursprünglichen http-Anfrage innerhalb meiner Lambda-Funktion. Wie kann ich auf sie zugreifen? Ich habe die Header auf event Objekt Eingang zu meiner Lambda-Funktion nicht gesehen.Zugriff auf http-Header in benutzerdefinierten Autorisierungsroutine AWS-Lambda-Funktion

Beachten Sie, dass dies kein Duplikat von How to access HTTP headers for request to AWS API Gateway using Lambda? ist. Die Frage bezieht sich auf die benutzerdefinierte Autorisierungs-Lambda-Funktion. Ich sehe keine Konfigurationsoption, um die eingehenden HTTP-Header an die Lambda-Funktion des Authorizers zu übergeben.

Gemäß AWS Documentation ruft das API Gateway Custom Authorizer mit der folgenden Eingabe auf. Basis auf dem unteren, ich nehme an, dass meine Frage nicht möglich ist. Aber ich möchte überprüfen, ob es einen Workaround gibt.

+0

nicht möglich. Warum brauchst du mehr als einen Header? Umgehung: Führen Sie die Authentifizierung/Autorisierung selbst in der Lambda-Funktion Ihrer Integration durch. – hellomichibye

Antwort

1

Leider ist dies im Moment nicht möglich, aber wir planen, diese Funktion zusammen mit einigen weiteren Verbesserungen an benutzerdefinierten Autorisierungen hinzuzufügen. Ich habe derzeit keine ETA zu liefern.

+0

Dies ist der beste Weg, um eine Art der Anfrageauthentifizierung (z. B. Verifizieren einer Signatur, die Daten aus den Anforderungsheadern, Abfragezeichenfolgen und Nutzdaten erfordern würde, ähnlich wie bei AWS V4) durchzuführen und dann unsere eigene Verifizierung innerhalb des Empfangs zu implementieren Lambda (oder Lambda-Menge, die API-Gateway-Endpunkten zugeordnet ist)? – Numbat

+2

Ich brauche diese Funktionen hinzufügen in Amazon API-Gateway, weil in meinem Anwendungsfall muss ich http-Header zugreifen, um X-API-KEY zu erhalten und zusammen mit Token Authorizer zu überprüfen. lassen Sie uns wissen, sobald Sie diese Funktionen hinzufügen. –

+2

Irgendwelche Updates seit einem Jahr? –

0

Nur im Anschluss daran, wie wir diese Funktion sehr mögen. Das Ergebnis von nur die Kopfzeile zu autorisieren ist, dass wir alle unsere Lambda-Funktionen nur basierend auf der gleichen Logik autorisieren können, obwohl das nicht was wir wollen.

Zur Umgehung des Problems haben wir über Lösungen gesprochen mehr Daten im Header enthalten (die nicht optimal ist)

Ansonsten gibt es immer die Möglichkeit, in der Lambda-Funktion selbst spezifische Genehmigung zu tun, aber in diesem Fall , wir haben wirklich keine Verwendung für die benutzerdefinierte API-Gateway-Autorisierung.

2

Dies ist nun möglich, durch eine Authoriser des Typs ‚Request‘ statt Token mit

Alle Details sind hier: http://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom-authorizer.html

grundsätzlich alle Header werden im Ereignisobjekt für eine Anforderung Genehmigung weitergegeben

dh Header Objekt auf Ereignis


    "headers": { 
     "X-wibble": "111", 
     "X-wobble": "222", 
     "x-amzn-ssl-client-hello": "*Deleted*", 
     "Via": "1.1 .cloudfront.net (CloudFront)", 
     "CloudFront-Is-Desktop-Viewer": "true", 
     "CloudFront-Is-SmartTV-Viewer": "false", 
     "CloudFront-Forwarded-Proto": "https", 
     "X-Forwarded-For": "*Deleted*", 
     "CloudFront-Viewer-Country": "GB", 
     "Accept": "*/*", 
     "User-Agent": "curl/7.55.1", 
     "X-Amzn-Trace-Id": "Root=*Deleted*", 
     "Host": "*Deleted*.execute-api.eu-west-1.amazonaws.com", 
     "X-Forwarded-Proto": "https", 
     "X-Amz-Cf-Id": "*Deleted*", 
     "CloudFront-Is-Tablet-Viewer": "false", 
     "X-Forwarded-Port": "443", 
     "CloudFront-Is-Mobile-Viewer": "false" 
    }