2017-08-11 9 views
3

私はAWS API Gatewayのラムダ認定を正常に実装しましたが、いくつかのカスタムプロパティをNode.jsエンドポイントに渡したいと思います。APIゲートウェイ認可者コン​​テキストをHTTP統合に渡す方法

マイ・オーソライザーからの私の出力は、以下に示すように、AWSで指定されたフォーマットに従います。私の場合は

{ 
    "principalId": "yyyyyyyy", 
    "policyDocument": { 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
     "Action": "execute-api:Invoke", 
     "Effect": "Allow|Deny", 
     "Resource": "arn:aws:execute-api:<regionId>:<accountId>:<appId>/<stage>/<httpVerb>/[<resource>/<httpVerb>/[...]]" 
     } 
    ] 
    }, 
    "context": { 
    "company_id": "123", 
    ... 
    } 
} 

contextは、私は私のノードのエンドポイントに沿って通過したいことを、company_idのように、いくつかのパラメータが含まれています。

私はラムダエンドポイントを使用していた場合、私はこれをマッピングテンプレートで行われていることを理解し、このような何か:ラムダは次のように選択されている場合

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

しかし、ボディマッピングテンプレートは、統合要求の下でのみ使用可能です統合タイプ。 HTTPが選択されていない場合

要するに、company_idをLambda認可者からNode APIに渡すにはどうすればよいですか?

+0

これらの値をHTTPリクエストヘッダーにドロップするとどうなりますか? –

+0

@ Michael-sqlbotこれは私がやりたいことです。ヘッダー、URLまたは本文は本当に重要ではありません。何でも良いでしょう。問題はどうやってそれをするのだろうか? –

+1

統合リクエストにヘッダを作成し、次に例を指定します。 'context.identity.whatever' *を先頭に' $ 'を付けずに*指定します。私はカスタムオーソライザを使用していませんが、これはコンテキストオブジェクト内の他のものにアクセスし、それらを原点に転送されるヘッダにドロップしています...例えば、 'context.stage'と' context.apiId 'と彼らは両方ともHTTPヘッダーとして期待どおりに転送します。それを試して? –

答えて

5

私の質問にはコメントのほとんどが@ Michael-sqlbotに送られますが、他の誰かがこの質問を見つけたら、ここで完全な答えを書きます。

オーソラムダそれは質問で指定されたコンテキストは、あなたのエンドポイントに転送するパラメータが含まれているこの形式でオブジェクトを返す必要があり

メソッドリクエスト/ HTTPリクエストヘッダの下
{ 
    "principalId": "yyyyyyyy", 
    "policyDocument": { 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Action": "execute-api:Invoke", 
     "Effect": "Allow|Deny", 
     "Resource": "arn:aws:execute-api:<regionId>:<accountId>:<appId>/<stage>/<httpVerb>/[<resource>/<httpVerb>/[...]]" 
    }] 
    }, 
    "context": { 
    "company_id": "123", <-- The part you want to forward 
    ... 
    } 
} 

メソッド要求

、転送したいコンテキストプロパティを追加します。

  • 名:company_id
  • 必須:オプション
  • キャッシング:オプション

統合要求

と統合リクエスト/ HTTPヘッダーの下に、追加します。

  • 名:context.authorizer.company_id
  • キャッシング:オプションからマップcompany_id
+0

これは、AWS Service Integrationの強力な文書化されていない(少なくともヘルプに記載されていない)機能だと思います。 –

0

lamda-proxyをお使いの場合は、event.requestContext.authorizer.contextから文脈にアクセスできます。

company_idには、event.requestContext.authorizer.context.company_idを使用してアクセスできます。

+0

ラムダプロキシを使用しないでください。できるだけ避けたいと思います。 –

関連する問題