Amazon API Gateway Lambda オーソライザーへの入力
TOKEN
タイプの Lambda オーソライザー (以前のカスタムオーソライザー) の場合は、API のオーソライザーを設定する際、[トークンのソース] としてカスタムヘッダーを指定する必要があります。API クライアントは、受信リクエストでそのヘッダーに必要な認証トークンを渡す必要があります。API Gateway
は、受信メソッドリクエストを受け取った時点で、カスタムヘッダーからトークンを抽出します。その後、authorizationToken
プロパティとしてメソッド ARN を渡すだけでなく、Lambda 関数の event
オブジェクトの methodArn
プロパティとしてトークンを渡します。
{ "type":"TOKEN", "authorizationToken":"
{caller-supplied-token}
", "methodArn":"arn:aws:execute-api:{regionId}
:{accountId}
:{apiId}
/{stage}
/{httpVerb}
/[{resource}
/[{child-resources}
]]" }
この例では、type
プロパティは、オーソライザーのタイプ (TOKEN
オーソライザー) を指定します。
は、クライアントリクエストの認証ヘッダーの値です。{caller-supplied-token}
methodArn
は、受信するメソッドリクエストの ARN であり、Lambda オーソライザーの設定に従って API Gateway により自動入力されます。
前のセクションで示した例の TOKEN
オーソライザーの Lambda 関数の場合、{caller-supplied-token}
文字列は、allow
、deny
、unauthorized
、またはその他の文字列値です。空の文字列値は unauthorized
と同じです。以下に示すのは、あらゆるステージ (Allow
) で AWS アカウント (GET
) の API (ymy8tbxw7b
) の 123456789012
メソッドで *
ポリシーを取得するための入力例です。
{ "type":"TOKEN", "authorizationToken":"allow", "methodArn":"arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/*/GET/" }
REQUEST
タイプの Lambda オーソライザーの場合、API Gateway は、event
オブジェクトの一部として、オーソライザーの Lambda 関数に、必要なリクエストパラメータを渡します。このリクエストパラメータには、ヘッダー、パスパラメータ、クエリ文字列パラメータ、ステージ変数、一部のリクエストコンテキスト変数などがあります。API
発信者は、パスパラメータ、ヘッダー、クエリ文字列パラメータを設定できます。API デベロッパーは API デプロイ時にステージ変数を設定する必要があります。API
Gateway ランタイムに、このリクエストコンテキストが指定されます。
パスパラメータは、リクエストパラメータとして Lambda オーソライザー関数に渡すことができますが、ID ソースとして使用することはできません。
次の例では、API メソッド (REQUEST
) をプロキシ統合に設定する GET /request
オーソライザーへの入力を表します。
{ "type": "REQUEST", "methodArn": "arn:aws:execute-api:us-east-1:123456789012:s4x3opwd6i/test/GET/request", "resource": "/request", "path": "/request", "httpMethod": "GET", "headers": { "X-AMZ-Date": "20170718T062915Z", "Accept": "*/*", "headerauth1": "headerValue1", "CloudFront-Viewer-Country": "US", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Is-Mobile-Viewer": "false", "User-Agent": "...", "X-Forwarded-Proto": "https", "CloudFront-Is-SmartTV-Viewer": "false", "Host": "....execute-api.us-east-1.amazonaws.com", "Accept-Encoding": "gzip, deflate", "X-Forwarded-Port": "443", "X-Amzn-Trace-Id": "...", "Via": "...cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "...", "X-Forwarded-For": "..., ...", "Postman-Token": "...", "cache-control": "no-cache", "CloudFront-Is-Desktop-Viewer": "true", "Content-Type": "application/x-www-form-urlencoded" }, "queryStringParameters": { "QueryString1": "queryValue1" }, "pathParameters": {}, "stageVariables": { "StageVar1": "stageValue1" }, "requestContext": { "path": "/request", "accountId": "123456789012", "resourceId": "05c7jb", "stage": "test", "requestId": "...", "identity": { "apiKey": "...", "sourceIp": "..." }, "resourcePath": "/request", "httpMethod": "GET", "apiId": "s4x3opwd6i" } }
requestContext
はキーと値のペアのマップであり、$context 変数に対応します。その結果は API に依存します。API Gateway は、マップに新しいキーを追加することがあります。Lambda プロキシ統合での Lambda
関数の入力の詳細については、「プロキシ統合のための Lambda 関数の入力形式」を参照してください。