- API にアクセスするリクエストの
authorizationheader を介してアクセストークンが渡されていることを確認します。 - JWKS endpoint から取得した公開キーを使用して、アクセストークンの RS256 署名を検証します。
- アクセストークンに、必要な発行者
issクレームとaudクレームが含まれていることを確認します。
- Auth0 API を作成する
- AWS API Gateway API をインポートしてデプロイする
- カスタムオーソライザーを作成する
- カスタムオーソライザーを使用して API を保護する
- デプロイをテストする
300 秒で、キャッシュの最大時間は 3600 秒です (キャッシュを無効にするには、値を 0 に設定することもできます) 。
詳しくは、Amazon Developer’s Guide の What is Amazon API Gateway? を参照してください。 の検証について詳しくは、JSON Web トークン の記事をご覧ください。
前提条件
Auth0 API を作成する
- Auth0 Dashboard > アプリケーション > APIs に移動し、Create API を選択します。
-
以下のフィールドに値を入力し、Create を選択します。

AWS API Gateway API のインポートとデプロイ
このチュートリアルのこの部分は、AWS の公式サンプルをもとにしています。詳細な注記や説明については、このサンプルを参照してください。
- API Gateway に API をインポートする
- API のインポートをテストする
- フロントエンドアプリケーションから利用できるように API をデプロイする
- API のデプロイをテストする
Pets API をインポートして設定する
- AWS アカウントにログインし、上部のナビゲーションバーにある Services ドロップダウンから API Gateway Console に移動します。
-
以前に API を作成したことがある場合は、API Gateway Console に移動して Create API をクリックします。すると、Create new API フォームで Example API を作成するオプションが表示されます。
API Gateway を使って API を一度も作成したことがない場合は、次の画面が表示されます。続行するには Get Started をクリックします。
API Gateway へようこそ、というポップアップメッセージが表示されます。続行するには OK をクリックします。

-
Create new API フォームでは、Example API がデフォルトで選択されており、エディター内にサンプル API が定義されていることがわかります。このチュートリアルの残りではこの API を使用するため、Import をクリックして API の作成を開始します。
完了すると、AWS によって API が作成され、指定したデータが取り込まれたことを示すメッセージが表示されます。この API には、すでにメソッド (

GETとPOST) が関連付けられていることに注目してください。リソースツリーでメソッド名をクリックすると、メソッドの詳細を確認したり、設定を変更したり、メソッドの呼び出しをテストしたりできます。
API をテストする
/pets の POST をクリックします。すると Method Execution ウィンドウが開き、POST メソッドの構造と動作の概要が表示されます。
- Method Request と Method Response: フロントエンドとの API のインターフェース
- Integration Request と Integration Response: バックエンドとの API の連携インターフェース
-
Test (ページ中央にある Client の細い領域に表示されています) をクリックします。
/pets - POST - Method Testページに移動するので、ページの一番下までスクロールし、次のスニペットを Request Body として入力します。リクエストボディには、データベースに追加するペットの属性と、そのペットの価格を指定します。
-
続けて Test をクリックします。テスト結果がページの右側に表示されます。

API をデプロイする
- Actions メニューから Deploy API を選択します。
-
次の値を入力し、Deploy をクリックします。
デプロイをテストする
-
Test Stage Editor ウィンドウの上部に、Invoke URL が表示された青いバナーがあります。これは、API の
GETエンドポイントを呼び出すための URL です。リンクをクリックして、ブラウザーからGET / methodリクエストを送信します。すると、次の成功レスポンスが返されるはずです。
-
Stages ページで、Test の下にあるツリーを展開します。
/pets/{petId}の下の GET をクリックします。
-
ウィンドウ上部の青いバナーに Invoke URL が表示されます。末尾の
{petID}はパス変数を表しています。この変数を1に置き換え、ブラウザーで新しい URL にアクセスしてください。次の JSON ペイロードを含む HTTP 200 リクエストを受け取るはずです。
- API Gateway は、適切に設定されたカスタムオーソライザーがあるかどうかを確認します。
- API Gateway は、認可トークンを渡してカスタムオーソライザー (Lambda 関数) を呼び出します。
- 認可トークンが有効な場合、カスタムオーソライザーは適切な AWS Identity and Access Management (IAM) ポリシーを返します。
- API Gateway は、手順 3 で返されたポリシーを使用してリクエストを認可します。
- 上記でダウンロードしたサンプルファイルを含むフォルダーを任意の場所に解凍し、コマンドラインでそのフォルダーに移動します。
-
サンプルフォルダー内で
npm installを実行し、デプロイに必要な Node.js の package をインストールします。AWS では、後の手順でアップロードするバンドルにこれらのファイルが含まれている必要があります。 -
.envファイルを使用してローカル環境を設定します。cp .env.sample .envを使うと、.env.sampleファイルを.envという名前でコピーできます。次のように変更してください。例として、設定完了後の.envファイルの内容は次のようになります。
- Auth0 Dashboard > アプリケーション > APIs に移動し、対象の API を選択して Test をクリックすると、API 用のテストトークンを取得できます。
- トークンを含むローカルの
event.jsonファイルを作成します。サンプルファイルをコピーできます (cp event.json.sample event.jsonを実行) 。ACCESS_TOKENを JWT トークンに、methodArnを API のGETメソッドに対応する適切な ARN 値に置き換えます。
methodArn を取得するには:
- API Gateway Console で PetStore API を開きます。
- 左側のナビゲーションで、Resources を選択します。
- 中央の Resources パネルでリソースツリーを展開し、
/petsの下にある GET を選択します。 - Method Request ボックスに ARN が表示されます。
npm testを実行してテストします。
Effect の値が Allow の場合、authorizer は API Gateway への呼び出しを許可したはずです。
詳細については、NPM の Lambda-local を参照してください。
IAM ロールを作成する
- AWS にログインし、IAM Console に移動します。左側のナビゲーションで Roles を選択します。
- Create new role を選択します。
- AWS service で AWS Lambda の行を選択し、Next: Permissions を選択します。
- Attach permissions policy 画面で AWSLambdaRole を選択します。表示されるフィルターを使うと、オプションの一覧を絞り込めます。Next: Tags を選択し、続けて Next: Review を選択して先に進みます。
-
Review 画面で、
Auth0Integrationなどの Role name を入力します。その他のフィールドはそのままにします。Create role を選択します。 - AWS がロールを作成すると、IAM の Roles ページに戻ります。新しいロールを選択します。
- 作成したロールの Summary ページで、Trust relationships ビューを選択します。
-
Edit trust relationship を選択し、Policy Document フィールドに次の JSON スニペットを入力します。
- Update Trust Policy をクリックします。
-
Summary ページに戻ります。後で使用するため、Role ARN の値をコピーしておきます。

-
npm run bundleを実行して、AWS にアップロードできるバンドルを作成します。これにより、AWS Lambda に必要なソース、設定、node modules を含むcustom-authorizer.zipバンドルが生成されます。 - Lambda コンソール に移動し、Create function をクリックします。
-
Select blueprint ページで、空の関数を作成するため Author from scratch をクリックします。Basic information で、次のパラメーターに値を入力します。
- 続行するには、Create Function をクリックします。
- 関数の Configuration ページで、Function Code セクションまで下にスクロールします。
- Code entry type として Upload a .ZIP file を選択します。
-
Upload をクリックし、先ほど作成した
custom-authorizer.zipバンドルを選択します。 -
次に、以下の 3 つの Environment variables を作成します。これらの情報は
.envファイルの内容と同じです。 - Execution role セクションで Use an existing role を選択し、Existing role として前に作成した IAM ロールを選択します。
- Basic settings で、Timeout を 30 秒に設定します。
- Save をクリックします。
- 作成した Lambda 関数をテストするには、右上の Test をクリックします。
-
Configure test event フォームに、
event.jsonファイルの内容をコピーします。デフォルトの “Hello World” イベント template を使用できます。 - Create をクリックします。
-
テストを選択して Test をクリックし、テストを実行します。テストが成功すると、“Execution result: succeeded” と表示されます。出力ウィンドウを展開すると、ローカルでのテスト成功後に表示されたものと同様のメッセージが表示されるはずです。

- API Gateway Console に戻り、先ほど作成した PetStore API を開きます。
-
左側のナビゲーションで Authorizers を開き、Create New Authorizer を選択します。次に、以下のパラメーターを設定し、Create をクリックします。
-
AWS によるオーソライザーの作成が完了し、ページが更新されたら、Test をクリックして、前に使用した Auth0 トークン (
Bearer ey...) を入力し、オーソライザーをテストします。 テストが成功すると、次のようなレスポンスが表示されます。
-
AWS にログインし、API Gateway Console に移動します。
カスタムオーソライザーはメソッド単位で設定します。1 つのオーソライザーで複数のメソッドを保護する場合は、メソッドごとに以下の手順を繰り返す必要があります。
-
このチュートリアルのステップ 2 で作成した PetStore API を開きます。中央ペインの Resource ツリーで、
/petsリソース配下の GET メソッドを選択します。
- Method Request を選択します。
-
設定 で、Authorization の右側にある pencil アイコンをクリックし、ステップ 3 で作成したカスタムオーソライザー
jwt-rsa-custom-authorizerを選択します。 -
check mark アイコンをクリックして、選択内容を保存します。API Key Required フィールドが
falseに設定されていることを確認してください。
APIをデプロイする
変更を公開するには、APIをデプロイします。- Actions メニューから Deploy API を選択します。
-
次の値を入力し、Deploy をクリックします。
デプロイをテストする
GET リクエストを送信します。このテストが失敗した場合は、JWT アクセストークンを正しく取得できているか確認してください。
詳しくは、アクセストークンを取得する を参照してください。