2017-02-16 4 views
3

Ich verwende benutzerdefinierte Authentifizierung (mit benutzerdefiniertem Autorisierungsmodul) für den Zugriff auf AWS Lambda. Der Autorisierungsprozess funktioniert einwandfrei. Aber ich habe ein Problem, Daten (ex PrincipalId) zwischen dem Autorisierungslambda und dem Geschäftslambda zu übertragen. Alle meine Lambdas werden in JS entwickelt. Wie im AWS-Dokument im Autorisierungs-Lambda erklärt, füge ich einige einfache Felder (principalId im folgenden Code) in das Kontextfeld der Auth-Antwort ein. Aber in meinem Geschäft Lambda, ich bin nicht in der Lage, diese Felder zu bekommen. Die AWS-Dokumentation spricht über die $ context-Variable.AWS-Lambda: Übergeben von Daten von benutzerdefiniertem Autorisierungsmodul an Geschäftslambda

Erstens könnten Sie mir erklären, wenn die $ context Variable eine andere Variable oder die gleiche Variable als der Kontext Variable in Parameter der JS-Funktion erhalten ist?

Zweitens, können Sie mir erklären, wie ich in meinem Geschäft Lambda das Datenfeld (zB: principalId) durch den Authorizer zur Verfügung gestellt bekommen?

Seb

+0

Um die Antwort zu klären, ist es in der Kontextvariablen in der JS-Funktion nicht verfügbar. Es ist in dem Fall. Bei dem Ereignis handelt es sich lediglich um eine JSON-Map, die entweder mit Ihrer Remapping-Vorlage oder einem Standardformat für die Proxy-Integration übereinstimmt. –

Antwort

2

Ich denke, die $context Variable, die Sie sich beziehen die eine in der API-Gateway-Mapping-Vorlage zur Verfügung steht. Es entspricht nicht dem context Parameter des Geschäfts Lambda.

Mithilfe der Zuordnungsvorlage und seiner $context Variablen können Sie jedoch den event Parameter des Geschäfts Lambda erstellen.

Wenn die Mapping-Vorlage Ihres API-Endpunkt wie folgt aussieht:

{ 
    "principalId" : "$context.authorizer.principalId" 
} 

Sie sollten die principalId im event Parameter des Lambda abrufen.

Mit der Pass-Through- Option, principalId sollte in event.context['authorizer-principal-id'] zur Verfügung. Dies ist das Standardverhalten beim Erstellen eines Endpunkts.


Referenzen über Mapping-Vorlagen im doc:

+0

Wie und wo definieren Sie die Zuordnungsvorlage? –

+0

Wechseln Sie zur Endpunktdefinition und geben Sie den Abschnitt * Integrationsanforderung * ein. In * Body Mapping Templates * gibt es verschiedene Optionen, um eine generische Integration oder eine spezifische zu definieren, abhängig vom Inhaltstyp der Anfrage. –

0

Neben Alexis Antwort, principalId - ist derzeit der einzige param, die von übergeben werden können Custom Authorizer zu einem Lambda (ab heute). Die Problemumgehung für das Übergeben von benutzerdefinierten Parametern besteht jedoch darin, JSON-Parameter in der Prinzipal-ID zu beschriften. Die Diskussion dazu ist here

Verwandte Themen