メニュー
Amazon API Gateway
開発者ガイド

API Gateway カスタムオーソライザーの使用

Amazon API Gateway カスタムオーソライザーは、API メソッドへのアクセスを管理するために提供する Lambda 関数です。カスタムオーソライザーでは、OAuth や SAML などのべアラートークン認証方法を使用します。また、ヘッダー、パス、クエリ文字列、ステージ変数、コンテキスト変数のリクエストパラメータで記述される情報も使用します。

注記

パスパラメータは、メソッドを呼び出す権限を付与または拒否するために使用できますが、ID ソースを定義するために使用することはできません。これは、認可ポリシーのキャッシングキーの一部として使用できます。ID ソースとして設定できるのは、ヘッダー、クエリ文字列、ステージ変数、コンテキスト変数のみです。

クライアントが API メソッドを呼び出すと、API Gateway は API に対してカスタムオーソライザーが設定されているかどうかを確認します。設定されている場合、API Gateway は Lambda 関数を呼び出します。この呼び出しでは、API Gateway は、トークンベースのオーソライザー用に指定されたリクエストヘッダーから抽出された認証トークンを指定するか、受信リクエストパラメータでリクエストパラメータベースのオーソライザー関数に入力 (例: event パラメータ) として渡します。

 API Gateway カスタム認証の流れ

JSON Web Token (JWT) 認証や OAuth プロバイダー呼び出しなどのさまざまな認証方法を実装できます。受信リクエストのパラメータ値に基づいてカスタムスキームを実装して、リクエストを承認する IAM ポリシーを返すこともできます。返されたポリシーが無効であるかアクセス権限が拒否された場合、API 呼び出しは成功しません。ポリシーが有効な場合、API Gateway は、受信トークンと関連付けて、返されたポリシーをキャッシュするか、ID ソースのリクエストパラメータをキャッシュします。その後、キャッシュされたポリシーは最大 3600 秒の事前設定された有効期限 (TTL) までキャッシュに格納され、現在および以降のリクエストに使用されます。TTL 期限を 0 秒に設定すると、ポリシーのキャッシュを無効にすることができます。デフォルトの TTL 値は 300 秒です。現在、TTL の最大値は 3600 秒を超えることはできません。

API Gateway カスタムオーソライザーのタイプ

API Gateway では、TOKEN タイプおよび REQUEST タイプのカスタムオーソライザーがサポートされています。

  • TOKEN タイプのカスタムオーソライザーは、ヘッダーで渡された認証トークンを使用して、指定されたリクエストを呼び出すためのアクセス権限を発信者に付与します。トークンは、OAuth トークンなどを使用します。

  • REQUEST タイプのカスタムオーソライザーは、リクエストパラメータ (例: ヘッダー、クエリ文字列、ステージ変数、コンテキストパラメータ) を使用して、指定されたリクエストを呼び出すためのアクセス権限を発信者に付与します。

API Gateway カスタム認証の Lambda 関数を作成する

API Gateway カスタムオーソライザーを作成する前に、まず、ロジックを実装する AWS Lambda 関数を作成して認証する必要があります。また、必要に応じて発信者を認証します。この関数は、API Gateway カスタム認証の設計図にあるコードテンプレートを使用して Lambda コンソールで作成できます。または、この awslabs の例に従って、ゼロから作成することもできます。ここでは、例として、設計図を使わずに、シンプルな Lambda 関数を一から作成する方法を説明します。実稼働コードでは、API Gateway カスタム認証の設計図に従って認証用の Lambda 関数を実装してください。

API Gateway カスタムオーソライザーの Lambda 関数を作成する際に、この関数から他の AWS サービスを呼び出す場合は、Lambda 関数に実行ロールを割り当てるよう求められます。次の例では、基本的な AWSLambdaRole で十分です。より複雑なユースケースの場合は、「指示」に従って、Lambda の実行ロールでアクセス権限を付与してください。 function.

TOKEN タイプのカスタムオーソライザーの Lambda 関数を作成する

TOKEN タイプの API Gateway カスタムオーソライザーの例として、Lambda コンソールのコードエディタで、以下の Node.js コードを入力します。

Copy
// A simple TOKEN authorizer example to demonstrate how to use an authorization token // to allow or deny a request. In this example, the caller named 'user' is allowed to invoke // a request if the client-supplied token value is 'allow'. The caller is not allowed to invoke // the request if the token value is 'deny'. If the token value is 'Unauthorized', the function // returns the 'Unauthorized' error with an HTTP status code of 401. For any other token value, // the authorizer returns an 'Invalid token' error. exports.handler = (event, context, callback) => { var token = event.authorizationToken; switch (token.toLowerCase()) { case 'allow': callback(null, generatePolicy('user', 'Allow', event.methodArn)); break; case 'deny': callback(null, generatePolicy('user', 'Deny', event.methodArn)); break; case 'unauthorized': callback("Unauthorized"); // Return a 401 Unauthorized response break; default: callback("Error: Invalid token"); } }; // Help function to generate an IAM policy var generatePolicy = function(principalId, effect, resource) { var authResponse = {}; authResponse.principalId = principalId; if (effect && resource) { var policyDocument = {}; policyDocument.Version = '2012-10-17'; policyDocument.Statement = []; var statementOne = {}; statementOne.Action = 'execute-api:Invoke'; statementOne.Effect = effect; statementOne.Resource = resource; policyDocument.Statement[0] = statementOne; authResponse.policyDocument = policyDocument; } // Optional output with custom properties of the String, Number or Boolean type. authResponse.context = { "stringKey": "stringval", "numberKey": 123, "booleanKey": true }; return authResponse; }

TOKEN タイプのカスタムオーソライザーの場合、API Gateway は、event.authorizationToken として、ソーストークンを Lambda 関数に渡します。このトークンの値に基づき、トークンの値が 'allow' の場合に、前述のオーソライザー関数は、指定されたメソッドで IAM の Allow ポリシーを返します。これにより、発信者は、指定されたメソッドを呼び出すことができます。発信者は 200 OK レスポンスを受け取ります。認証トークンが 'deny' 値の場合、オーソライザー関数は、指定のメソッドで Deny を返します。これにより、発信者はメソッドの呼び出しができなくなります。クライアントは 403 Forbidden レスポンスを受け取ります。トークンが 'unauthorized' の場合、クライアントは 401 Unauthorized レスポンスを受け取ります。トークンが 'fail' またはその他である場合、クライアントは 500 Internal Server Error レスポンスを受け取ります。最後のケースの場合はいずれも、IAM ポリシーは生成されません。また、呼び出しは失敗します。

注記

実稼働コードでは、権限を付与する前にユーザーの認証が必要になる場合があります。その場合は、Lambda 関数で認証ロジックを追加することもできます。このような認証プロバイダーを呼び出す方法については、各プロバイダーが提供するドキュメントを参照してください。

カスタムオーソライザー関数は、IAM ポリシーだけでなく、発信者のプリンシパル ID を返す必要があります。オプションで、context というキー/値マップを返すことができます。これには、統合バックエンドに渡すことができる追加情報が含まれます。オーソライザーの出力形式については、「Amazon API Gateway カスタム認証からの出力」を参照してください。

オーソライザーからバックエンドに、キャッシュされた認証情報を返すには、context マップを使用します。この際、統合リクエストのマッピングテンプレートを使用します。これにより、バックエンドのユーザーエクスペリエンスを強化するには、キャッシュされた認証情報を使用して、シークレットキーにアクセスする必要性を抑え、リクエストごとに認証トークンを開きます。

Lambda プロキシ統合の場合、API Gateway は、カスタムオーソライザーの context オブジェクトを、入力 event の一部としてバックエンドの Lambda 関数に直接渡します。context のキー/値ペアは、Lambda 関数で $event.requestContext.authorizer.key を呼び出して取得できます。前のカスタムオーソライザーの例では、keystringKeynumberKeybooleanKey のいずれかです。その値は、それぞれ文字列化されて "stringval""123""true" になります。

先に進む前に、Lambda コンソール内から Lambda 関数をテストすることもできます。テストするには、「Amazon API Gateway カスタム認証への入力」の説明に従って、サンプルイベントを設定して入力を指定し、「Amazon API Gateway カスタム認証からの出力」と互換性のあるその出力を調べることで結果を検証します。次のサブセクションでは、Request オーソライザーの Lambda 関数を作成する方法について説明します。

REQUEST タイプのカスタムオーソライザーの Lambda 関数を作成する

REQUEST タイプの API Gateway カスタムオーソライザーの例として、Lambda コンソールのコードエディタで、以下の簡素化された Lambda 関数の Node.js コードを入力します。

Copy
exports.handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); // A simple REQUEST authorizer example to demonstrate how to use request // parameters to allow or deny a request. In this example, a request is // authorized if the client-supplied HeaderAuth1 header, QueryString1 query parameter, // stage variable of StageVar1 and the accountId in the request context all match // specified values of 'headerValue1', 'queryValue1', 'stageValue1', and // '123456789012', respectively. // Retrieve request parameters from the Lambda function input: var headers = event.headers; var queryStringParameters = event.queryStringParameters; var pathParameters = event.pathParameters; var stageVariables = event.stageVariables; var requestContext = event.requestContext; // Parse the input for the parameter values var tmp = event.methodArn.split(':'); var apiGatewayArnTmp = tmp[5].split('/'); var awsAccountId = tmp[4]; var region = tmp[3]; var restApiId = apiGatewayArnTmp[0]; var stage = apiGatewayArnTmp[1]; var method = apiGatewayArnTmp[2]; var resource = '/'; // root resource if (apiGatewayArnTmp[3]) { resource += apiGatewayArnTmp[3]; } // Perform authorization to return the Allow policy for correct parameters and // the 'Unauthorized' error, otherwise. var authResponse = {}; var condition = {}; condition.IpAddress = {}; if (headers.HeaderAuth1 === "headerValue1" && queryStringParameters.QueryString1 === "queryValue1" && stageVariables.StageVar1 === "stageValue1" && requestContext.accountId === "123456789012") { callback(null, generateAllow('me', event.methodArn)); } else { callback("Unauthorized"); } } // Help function to generate an IAM policy var generatePolicy = function(principalId, effect, resource) { // Required output: var authResponse = {}; authResponse.principalId = principalId; if (effect && resource) { var policyDocument = {}; policyDocument.Version = '2012-10-17'; // default version policyDocument.Statement = []; var statementOne = {}; statementOne.Action = 'execute-api:Invoke'; // default action statementOne.Effect = effect; statementOne.Resource = resource; policyDocument.Statement[0] = statementOne; authResponse.policyDocument = policyDocument; } // Optional output with custom properties of the String, Number or Boolean type. authResponse.context = { "stringKey": "stringval", "numberKey": 123, "booleanKey": true }; return authResponse; } var generateAllow = function(principalId, resource) { return generatePolicy(principalId, 'Allow', resource); } var generateDeny = function(principalId, resource) { return generatePolicy(principalId, 'Deny', resource); }

必要なパラメータ (HeaderAuth1QueryString1StageVar1accountId) 値が事前定義された値と一致した場合、REQUEST オーソライザーの Lambda 関数は、入力リクエストパラメータを検証して、IAM の Allow ポリシーを指定されたメソッドで返します。これにより、発信者は、指定されたメソッドを呼び出すことができます。発信者は 200 OK レスポンスを受け取ります。それ以外の場合、オーソライザー関数は、Unauthorized エラーを返します。IAM ポリシーは生成されません。

先に進む前に、Lambda コンソール内から Lambda 関数をテストすることもできます。テストするには、サンプルイベントを設定して入力を提供し、その出力を調べることで結果を検証します。以下の 2 つのセクションでは、Amazon API Gateway カスタム認証への入力Amazon API Gateway カスタム認証からの出力 について説明します。

Amazon API Gateway カスタム認証への入力

TOKEN タイプのカスタムオーソライザーの場合は、API のオーソライザーを設定する際、[Token Source] としてカスタムヘッダーを指定する必要があります。API クライアントは、受信リクエストで必要な認証トークンを渡す必要があります。API Gateway は、受信メソッドリクエストを受け取った時点で、カスタムヘッダーからトークンを抽出します。その後、methodArn プロパティとしてメソッド ARN を渡すだけでなく、Lambda 関数の event オブジェクトの authorizationToken プロパティとしてトークンを渡します。

Copy
{ "type":"TOKEN", "authorizationToken":"<caller-supplied-token>",     "methodArn":"arn:aws:execute-api:<regionId>:<accountId>:<apiId>/<stage>/<method>/<resourcePath>" }

この例では、type プロパティは、オーソライザーのタイプ (TOKEN オーソライザー) を指定します。<caller-supplied-token> は、クライアントリクエストのカスタム認証ヘッダーからの値です。methodArn は、受信するメソッドリクエストの ARN であり、カスタム認証の設定に従って API Gateway により自動入力されます。

前のセクションで示した例の TOKEN オーソライザーの Lambda 関数の場合、<caller-supplied-token> 文字列は、allowdenyunauthorized、またはその他の文字列値です。空の文字列値は unauthorized と同じです。以下に示すのは、あらゆるステージ (*) で AWS アカウント (123456789012) の API (ymy8tbxw7b) の GET メソッドで Allow ポリシーを取得するための入力例です。

Copy
{ "type":"TOKEN", "authorizationToken":"allow", "methodArn":"arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/*/GET/" }

REQUEST タイプのカスタムオーソライザーの場合、API Gateway は、event オブジェクトの一部として、オーソライザーの Lambda 関数に、必要なリクエストパラメータを渡します。このリクエストパラメータには、ヘッダー、パスパラメータ、クエリ文字列パラメータ、ステージ変数、一部のリクエストコンテキスト変数などがあります。API 発信者は、パスパラメータ、ヘッダー、クエリ文字列パラメータを設定できます。API 開発者は API デプロイ時にステージ変数を設定する必要があります。API Gateway 実行時に、このリクエストコンテキストが指定されます。

次の例では、API メソッド (GET /request) をプロキシ統合に設定する REQUEST オーソライザーへの入力を表します。

Copy
{ "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 関数の入力形式 」を参照してください。

Amazon API Gateway カスタム認証からの出力

カスタムオーソライザーの Lambda 関数は、プリンシパル ID (principalId) を含む必要がある出力と、ポリシーステートメントのリストを含むポリシードキュメント (policyDocument) を返します。出力には、キー/値ペアを含む context マップも含まることがあります。この出力の例を以下に示します。

Copy
{   "principalId": "yyyyyyyy", // The principal user identification associated with the token sent by the client. "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": { "stringKey": "value", "numberKey": "1", "booleanKey": "true" } }

ここで、ポリシーステートメントは、指定された API メソッド (Resource) を呼び出す (Action) ことを API Gateway 実行サービスに許可するか拒否するか (Effect) を指定しています。ワイルドカード (*) を使ってリソースタイプ (メソッド) を指定できます。API を呼び出す有効なポリシーの設定の詳細については、「API Gateway で API を実行するための IAM ポリシーのステートメントの参照」を参照してください。

principalId 値には、マッピングテンプレートで $context.authorizer.principalId 変数を使ってアクセスできます。これはバックエンドに値を渡す場合に便利です。詳細については、「$context 変数へのアクセス」を参照してください。

マッピングテンプレート内の context マップの stringKeynumberKey、または booleanKey 値 (例: "value""1"、または "true") には、それぞれ $context.authorizer.stringKey$context.authorizer.numberKey、または $context.authorizer.booleanKey を呼び出すことによりアクセスできます。返される値は、すべてが文字列化されます。context マップでキーの有効な値として JSON オブジェクトまたは配列を設定することはできません。

次に示すのは、カスタム認証例からの出力例です。この出力例は、あらゆるステージ (*) で AWS アカウント (123456789012) の API (ymy8tbxw7b) の GET メソッドに対する呼び出すのをブロック (Deny) するポリシーステートメントを示しています。

Copy
{ "principalId": "user", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Deny", "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/*/GET/" } ] } }

API Gateway コンソールを使用してカスタム認証を設定する

Lambda 関数を作成してそれが機能することを確認したら、API Gateway コンソールで以下のステップを使用して、API Gateway カスタムオーソライザーを設定できます。

API メソッドでカスタムオーソライザーを有効にするには

  1. API Gateway コンソールにサインインします。

  2. 新しい API を作成するか、既存の API を選択して、API の [ Authorizers] を選択します。

  3. [Create New Authorizer] を選択します。

  4. [Create Authorizer] の [Name] 入力フィールドに、オーソライザー名を入力します。

  5. [Type] で、[Lambda] オプションを選択します。

  6. [Lambda Function] で、リージョンを選択後、利用可能なカスタムオーソライザーの Lambda 関数を選択します。

  7. [Lambda Execution Role] を空欄のままにして、API Gateway コンソールでリソースベースのポリシーを設定します。このポリシーでは、オーソライザーの Lambda 関数を呼び出す API Gateway 権限を付与します。IAM ロールの名前を入力して、API Gateway でオーソライザーの Lambda 関数を呼び出せるようにします。このようなロールの例については、「API が Lambda 関数を呼び出すように IAM のロールとポリシーを設定する」を参照してください。

    API Gateway コンソールでリソースベースのポリシーを設定するように選択した場合は、[Add Permission to Lambda Function] ダイアログが表示されます。[OK] を選択します。カスタム認証を作成したら、適切な認証トークン値を使ってテストし、期待どおりに機能することを確認します。

  8. [Lambda Event Payload] で、TOKEN オーソライザーの [Token] または [REQUEST] オーソライザーの [Request] を選択します。(これは、「type」プロパティを TOKEN または REQUEST に設定するのと同じです。)

  9. 前のステップの選択内容に応じて、次のいずれかを実行します。

    1. [Token] オプションで、以下の操作を行います。

      • [Token Source] にヘッダーの名前を入力します。認証トークンをカスタムオーソライザーに送信するには、この名前のヘッダーが API クライアントに含まれている必要があります。

      • 必要に応じて、Token Validation 入力フィールドに RegEx ステートメントを入力します。API Gateway は、この式に対して、入力トークンの初期検証を実行し、認証が成功するとオーソライザーを呼び出します。これにより、無効なトークンの処理費用を減少できます。

      • オーソライザーによって生成された認可ポリシーのキャッシュの実行有無によって、[Authorization Caching] で、[Enabled] オプションを選択またはクリアします。ポリシーのキャッシュが有効の場合、デフォルト値 (300) から [TTL] 値を変更できます。TTL=0 に設定すると、ポリシーのキャッシュは無効になります。ポリシーのキャッシュが有効の場合、[Token Source] で指定されているヘッダー名はキャッシュキーになります。

    2. [Request] オプションで、以下の操作を行います。

      • [Identity Sources] に、選択したパラメータタイプのリクエストパラメータ名を入力します。サポートされているパラメータタイプは、HeaderQuery StringStage Variable、および Context です。ID ソースを追加するには、[Add Identity Source] を選択します。

        API Gateway では、リクエストオーソライザーのキャッシングキーとして、指定された ID ソースを使用します。キャッシュが有効の場合、API Gateway は、指定されているすべての ID ソースが実行時に存在していることを確認できた場合のみ、Lambda 関数を呼び出します。指定された ID ソースが欠落しているか、null、または空の場合、API Gateway は、401 Unauthorized レスポンスを返します。オーソライザーの Lambda 関数を呼び出すことはありません。

        複数の ID ソースが定義されている場合、それらはすべて、オーソライザーのキャッシュキーを取得するために使用されます。キャッシュキー部分のいずれかを変更すると、オーソライザーは、キャッシュされたポリシードキュメントを破棄し、新しいドキュメントを作成します。

      • オーソライザーによって生成された認可ポリシーのキャッシュの実行有無によって、[Authorization Caching] で、[Enabled] オプションを選択または選択解除します。ポリシーのキャッシュが有効の場合、デフォルト値 (300) から [TTL] 値を変更できます。TTL=0 に設定すると、ポリシーのキャッシュは無効になります。

        キャッシングが無効の場合は、ID ソースを指定する必要はありません。API Gateway は、オーソライザーの Lambda 関数を呼び出す前に検証を実行することはありません。

    注記

    キャッシングを有効にするには、認証は API 全体のすべてのメソッドに適用されるポリシーを返す必要があります。メソッド固有のポリシーを強制するには、TTL 値をゼロに設定して API に対するポリシーのキャッシングを無効にすることができます。

  10. [Create] を選択して、選択した API の新しいカスタムオーソライザーを作成します。

  11. API のオーソライザーが作成されたら、メソッドで構成する前に、必要に応じてオーソライザーをテストすることができます。

    [TOKEN] オーソライザーの [Identity token] 入力フィールドに有効なトークンを入力し、[Test] を選択します。トークンは、オーソライザーの [Identity token source] 設定で指定したヘッダーとして、Lambda 関数に渡されます。

    [REQUEST] オーソライザーで、指定された ID ソースに対応する有効なリクエストパラメータを入力し、[Test] を選択します。

    オーソライザーの呼び出しをテストするには、API Gateway コンソールだけでなく、 API Gateway の AWS CLI または AWS SDK を使用できます。AWS CLI を使用してテストする方法については、「オーソライザーのテスト呼び出し」を参照してください。

    注記

    オーソライザーのテスト呼び出しを実行するメソッドのテスト呼び出しは、独立したプロセスです。

    API Gateway コンソールを使用してメソッドのテスト呼び出しを行う方法については、「コンソールを使用してメソッドをテストする」を参照してください。AWS CLI を使用してメソッドのテスト呼び出しを行う方法については、「メソッドのテスト呼び出し」を参照してください。

    メソッドおよび設定済みのオーソライザーのテスト呼び出しを行うには、API をデプロイした後、cURL または Postman を使用してメソッドを呼び出し、必要なトークンまたはリクエストパラメータを指定します。

次の手順では、API メソッドでカスタム認証を使用するように設定する方法を示します。

API メソッドを設定してカスタムオーソライザーを使用するには

  1. API に戻ります。新しいメソッドを作成するか、既存のメソッドを選択します。必要に応じて、新しいリソースを作成します。

  2. [Method Execution] で、[Method Request] リンクを選択します。

  3. [Authorization Settings] で [Authorization] ドロップダウンリストを展開し、先ほど作成したカスタムオーソライザー (例: [myTestApiAuthorizer]) を選択してから、チェックマークアイコンを選択して選択内容を保存します。

  4. オプションとして、カスタム認証トークンもバックエンドに渡す場合は、[Method Request] ページで [Add header] を選択します。[Name] に、API のカスタムオーソライザーを作成した際に指定した [Token Source] と一致するカスタムヘッダー名を入力します。続いて、チェックマークアイコンを選択して、設定を保存します。このステップは [REQUEST] オーソライザーには適用されません。

  5. [Deploy API] を選択して、API をステージにデプロイします。[Invoke URL] の値をメモしておきます。この値は、API を呼び出すときに必要になります。ステージ変数を使用した REQUEST オーソライザーの場合は、必要なステージ変数を定義して、[Stage Editor] で値を指定する必要があります。

API Gateway カスタムオーソライザーで API を呼び出す

カスタムオーソライザーを設定し、API をデプロイしている場合は、カスタムオーソライザーを有効にして API をテストする必要があります。そのためには、cURL などの REST クライアントが必要です。Postman以下の例では、Postman を使用します。

注記

オーソライザーが有効なメソッドを呼び出すとき、TOKEN オーソライザーが設定されていない、Null である、または指定された [Token validation expression] によって無効にされている場合、API Gateway は CloudWatch への呼び出しを記録しません。同様に、REQUEST オーソライザーに必要な ID ソースのいずれかが設定されていない、Null である、または空の場合、API Gateway は、CloudWatch への呼び出しを記録しません。

以下では、前述のカスタム TOKEN オーソライザーを有効にした状態で、Postman を使用して API を呼び出すか、テストする方法を説明します。必要なパス、ヘッダー、またはクエリ文字列パラメータを明示的に指定している場合は、このメソッドをカスタム REQUEST オーソライザーを使用した API の呼び出しに適用できます。

カスタムの TOKEN オーソライザーで API を呼び出すには

  1. [Postman ] を開き、[GET] メソッドを選択して、API の [Invoke URL ] を、隣の URL フィールド内に貼り付けます。

    カスタム認証トークンヘッダーを追加し、その値を allow に設定します。[Send] を選択します。

     カスタム認証 Allow トークンで API を呼び出す

    レスポンスは、API Gateway カスタム認証が [200 OK] レスポンスを返し、メソッドに関連付けられた HTTP エンドポイント (http://httpbin.org/get) にアクセスすることを適切に呼び出しに許可していることを示しています。

  2. Postman で、カスタム認証トークンヘッダー値を deny に変更します。[Send] を選択します。

     カスタム認証 Deny トークンで API を呼び出す

    レスポンスは、API Gateway カスタム認証が [403 Forbidden] レスポンスを返し、HTTP エンドポイントにアクセスすることを呼び出しに許可しないことを示しています。

  3. Postman で、カスタム認証トークンヘッダー値を unauthorized に変更し、[Send] を選択します。

     カスタム認証 Unauthorized トークンで API を呼び出す

    レスポンスは、API Gateway が [401 Unauthorized] レスポンスを返し、HTTP エンドポイントにアクセスすることを呼び出しに許可しないことを示しています。

  4. ここで、カスタム認証トークンヘッダー値を fail に変更します。[Send] を選択します。

     カスタム認証 Fail トークンで API を呼び出す

    レスポンスは、API Gateway が [500 Internal Server Error] レスポンスを返し、HTTP エンドポイントにアクセスすることを呼び出しに許可しないことを示しています。