- API にアクセスするリクエストの
authorizationヘッダーでアクセストークンが渡されていることを確認します。 - JWKS エンドポイントから取得した公開鍵を使用して、アクセストークンの RS256 署名を検証します。
- アクセストークンに必要な Issuer
issクレームとaudクレームが含まれていることを確認します。
- Auth0 API を作成する
- AWS API Gateway API をインポートしてデプロイする
- カスタムオーソライザーを作成する
- カスタムオーソライザーを使用して API を保護する
- デプロイをテストする
300 秒で、キャッシュの最長時間は 3600 秒です (値を 0 に設定してキャッシュを無効にすることもできます) 。
詳細については、Amazon Developer’s Guide の What is Amazon API Gateway? を参照してください。 の検証について詳しくは、JSON Web Token の記事を参照してください。
前提条件
Auth0 API を作成する
- Auth0 Dashboard > Applications > 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 の作成を開始します。
完了すると、指定したデータを使用して API が作成され、設定されたことを示すメッセージが AWS によって表示されます。この 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 をクリックします。
パラメーター 値 Deployment stage [New Stage]を選択しますStage name ステージの名前を入力します Stage description ステージの説明を入力します Deployment description API デプロイメントの説明を入力します
デプロイをテストする
-
Test Stage Editor ウィンドウの上部には、Invoke URL が表示された青いバナーがあります。これは、API の
GETエンドポイントを呼び出すための URL です。リンクをクリックして、ブラウザーでGET /メソッドのリクエストを送信します。成功すると、次のレスポンスが返されます。
-
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 パッケージをインストールします。後の手順で AWS にアップロードするバンドルには、これらのファイルを含める必要があります。 -
.envファイルを使用してローカル環境を設定します。cp .env.sample .envを実行すると、.env.sampleファイルをコピーして.envにリネームできます。次のように変更してください。例として、設定完了後のパラメーター 値 TOKEN_ISSUERトークンの発行者です。Auth0 がトークンの発行者である場合は、 https://{yourDomain}/を使用します。末尾のスラッシュを必ず含めてください。JWKS_URIJWKS エンドポイントの URL です。Auth0 がトークンの発行者である場合は、 https://{yourDomain}/.well-known/jwks.jsonを使用します。AUDIENCE上記の「Auth0 API を作成する」セクションで作成した API の 識別子 値です。 .envファイルの内容は次のようになります。
- Auth0 Dashboard > Applications > 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 モジュールを含むcustom-authorizer.zipバンドルが生成されます。 - Lambda コンソールに移動し、Create function をクリックします。
-
Select blueprint ページで、空の関数を作成するために Author from scratch をクリックします。Basic information で、以下のパラメーターに値を設定します。
パラメーター 値 Name jwtRsaCustomAuthorizerなどの Lambda 関数名Description Lambda 関数の説明 (任意) Runtime Node.js 10.xを選択 - Create Function をクリックして続行します。
- 関数の Configuration ページで、Function Code セクションまで下にスクロールします。
- Code entry type で Upload a .ZIP file を選択します。
-
Upload をクリックし、先ほど作成した
custom-authorizer.zipバンドルを選択します。 -
次に、以下の 3 つの Environment variables を作成します。この情報は
.envファイルの内容と同じです。パラメーター 値 TOKEN_ISSUERトークンの発行者です。Auth0 がトークン発行者である場合は、 https://{yourDomain}/を使用しますJWKS_URIJWKS エンドポイントの URL です。Auth0 がトークン発行者である場合は、 https://{yourDomain}/.well-known/jwks.jsonを使用しますAUDIENCE手順 1 で作成した API の 識別子 の値 - Execution role セクションで Use an existing role を選択し、Existing role で以前作成した IAM ロールを選択します。
- Basic settings で、Timeout を 30 秒に設定します。
- Save をクリックします。
- 作成した Lambda 関数をテストするには、右上の Test をクリックします。
-
event.jsonファイルの内容を Configure test event フォームにコピーします。デフォルトの “Hello World” イベントテンプレートを使用できます。 - Create をクリックします。
-
テストを選択して Test をクリックし、実行します。テストが成功すると、“Execution result: succeeded” と表示されます。出力ウィンドウを展開すると、ローカルでのテスト成功後に受け取ったものと同様のメッセージが表示されます。

- API Gateway Console に戻り、先ほど作成した PetStore API を開きます。
-
左側のナビゲーションで Authorizers を開き、Create New Authorizer を選択します。次に、以下のパラメーターを設定して Create をクリックします。
パラメーター 値 名前 jwt-rsa-custom-authorizerタイプ Lambda を選択 Lambda リージョン 先ほど作成した Lambda 関数のリージョンを使用 Lambda 関数 jwtRsaCustomAuthorizerLambda 呼び出しロール 上でコピーした IAM Role ARN Lambda イベントペイロード Token を選択 トークンソース Authorizationトークン検証 ^Bearer [-0-9a-zA-z\.]*$TTL (秒) 3600 -
AWS によるオーソライザーの作成が完了し、ページが更新されたら、Test をクリックして、前に使用した Auth0 トークン (
Bearer ey...) を入力し、オーソライザーをテストします。 テストが成功すると、次のようなレスポンスが表示されます。
-
AWS にログインし、API Gateway Console に移動します。
カスタムオーソライザーはメソッドごとに設定します。1 つのオーソライザーで複数のメソッドを保護する場合は、各メソッドに対して以下の手順を繰り返す必要があります。
-
このチュートリアルの手順 2 で作成した PetStore API を開きます。中央ペインの Resource ツリーで、
/petsリソースの GET メソッドを選択します。
- Method Request を選択します。
-
Settings で、Authorization の右側にある pencil アイコンをクリックし、手順 3 で作成したカスタムオーソライザー
jwt-rsa-custom-authorizerを選択します。 -
check mark アイコンをクリックして、選択内容を保存します。API Key Required フィールドが
falseに設定されていることを確認してください。
API をデプロイする
- Actions メニューから Deploy API を選択します。
-
次の値を設定し、Deploy をクリックします。
パラメーター 値 Deployment stage [New Stage]を選択しますStage name ステージの名前を入力します Stage description ステージの説明を入力します Deployment description API デプロイの説明を入力します
デプロイをテストする
GET リクエストを実行します。このテストが失敗する場合は、JWT アクセストークンを正しく取得できていることを確認してください。
詳細については、アクセストークンを取得する を参照してください。