

# API Gateway Lambda オーソライザーへの入力
<a name="api-gateway-lambda-authorizer-input"></a>

次のセクションでは、API Gateway から Lambda オーソライザーへの入力の形式について説明します。

## `TOKEN` の入力形式
<a name="w2aac15b9c23c25c19b5"></a>

 `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 により自動入力されます。

## `REQUEST` の入力形式
<a name="w2aac15b9c23c25c19b7"></a>

`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:abcdef123/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": "..."
  },
  "queryStringParameters": {
    "QueryString1": "queryValue1"
  },
  "pathParameters": {},
  "stageVariables": {
    "StageVar1": "stageValue1"
  },
  "requestContext": {
    "path": "/request",
    "accountId": "123456789012",
    "resourceId": "05c7jb",
    "stage": "test",
    "requestId": "...",
    "identity": {
      "apiKey": "...",
      "sourceIp": "...",
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "resourcePath": "/request",
    "httpMethod": "GET",
    "apiId": "abcdef123"
  }
}
```

 `requestContext` はキーと値のペアのマップであり、[\$1context](api-gateway-mapping-template-reference.md#context-variable-reference) 変数に対応します。その結果は API に依存します。

 API Gateway は、マップに新しいキーを追加する場合があります。Lambda プロキシ統合での Lambda 関数の入力の詳細については、「[プロキシ統合のための Lambda 関数の入力形式](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format)」を参照してください。