この機能は委任を使用します。2017年6月8日より、アドオンを使用していないテナントでは、デフォルトで委任が無効になります。委任を必要とするアドオンを使用中のレガシーテナントは、引き続きこの機能を使用できます。今後、委任機能が変更されるか、サービスから削除されることがあれば、使用中のお客様が余裕を持って移行できるよう、あらかじめお知らせします。また、委任はカスタムドメインの使用をサポートしていないため、委任に依存する機能をカスタムドメインと共に使うとうまく機能しない可能性があります。
手順5 - IDフローにIDトークンを使用する
この最後の手順では以下を行います。- の(JWT)を渡して、サービスへIDを送る
- トークンを検証する
- プロファイル情報を抽出して、ペットの購入者を割り当てる
IDトークンを使用する
ユーザーに関する情報の処理や取得には、Lambda関数を使用することができます。たとえば、購入トランザクション中に、IDトークンで返されたプロファイルからユーザー名を取得したとします。その際に、JSON Web Token(JWT)であるID自体に埋め込まれたユーザーの情報も取得することができます。 JWTの使用する利点は、以下を行えることです。- JWTの真正性を検証する
- 呼び出しを行っているユーザーが認証されることを確実にする(改ざんの可能性があるプレーンテキストのパラメーターに依存しない)
JWTに情報を追加する
JWTにユーザー情報を追加するには、いくつかの方法があります。以下の例では、ユーザーのメールアドレスをJWTに追加していますが、概念は他のユーザーのデータポイントについても同じです。ルールを使用する
ユーザーのメールアドレスをJWTに追加する方法の1つが、ルールです。この方法は、値がユーザー認証用のJWTで常に利用可能なことを確実にしたい場合には適切です。login.js
では、auth.signin
に渡されるパラメーターにこのスコープが指定されているのを確認できます。
JWTトークンを検証する
AWS Lambdaコンソールは、ブラウザーコンソールでNode.jsコードを入力する際に、限られた数のノードモジュールにのみアクセスするため、IDトークンを処理するパッケージとして追加でモジュールをインクルードして、Lambda関数をアップロードする必要があります。 詳細については、「Node.jsを使って導入パッケージを作成する」と「導入パッケージをアップロードしてテストする」をご覧ください。 以下のシードプロジェクトには、更新されたAWS Lambda関数に必要なコードが含まれています。 シードプロジェクト内には、以下の2つのカスタムJavaScriptファイルがあります。index.js
:メインコードが含まれています。auth0-variables
:更新する必要のあるコードが含まれています。
package.json
ファイルがあります。
コードは、JWTから情報を抽出して、JWTを検証するために機能性を追加します。Auth0はデフォルトで対称キーを使用しますが、非対称キーの使用を選ぶこともできます(サードパーティがトークンを検証可能にする必要がある場合には、非対称キーを使用して、公開鍵だけを共有します)。
トークン検証の詳細については、「Auth0が対応しているIDプロトコル」をご覧ください。
秘密鍵でauth0-variables.js
を更新します。秘密鍵は、にある[Application(アプリケーション)]の[Settings(設定)]タブに表示されます。
index.js
は必ずZIPのルート)、Lambda関数のPurchasePet
が使えるようにアップロードします。これをテストすると、JWTがメッセージの本文にないため、認証が失敗します。
index.js
でロジックを確認します。60行目辺りのロジックではトークンが検証して解読され、購入ロジックで使われるID情報が含まれた、デコードされた情報が抽出されています。
プロファイル情報を抽出して購入者を割り当てる
最後の手順では、JWTをブラウザーのクライアントが使用するメソッドに渡します。 標準のメソッドにはAuthorization
ヘッダーがBearerトークンとして含まれており、このメソッドを使用するには、IAM認証を無効にして、認証にOpenIDのトークンだけを使用する必要があります(AWS Lambda関数に渡すイベントデータにAuthorizationヘッダーをマッピングすることも必要です)。
ところが、IAMを使用している場合、AWS API GatewayはAuthorization
ヘッダーにメッセージの署名を含んでいるため、このヘッダーにJWTを書き込むと認証が破壊されます。これは以下のいずれかの方法で対処します。
- JWTのためにカスタムヘッダーを追加する
- メッセージの本文にカスタムヘッダーを入れる
pets/purchase
のPOSTメソッドの統合要求に何らかのマッピングを行う必要があります。
検証プロセスを続けるために、AWS Lambda関数へのPOSTの本文でJWTを渡します。これを行うには、以下のように、本文からuserName
を削除して、authToken
を追加することで、home.js
でbuyPet
メソッドを更新します。
Summary(概要)
このチュートリアルでは、以下について説明されています。- AWS Lamdba関数を用いたメソッドなど、AWS API Gatewayを使ってAPIを作成する
- IAMロールを使ってAPIへのアクセスを保護する
- APIへのアクセスをユーザーベースと結び付けて、 IDプロバイダーとIAMを統合する
- ユーザーがデータベース接続か、ソーシャル接続かを基にして、異なるレベルのアクセスを提供する
- Auth0を使ってロールの割り当てを強制する
- JWTを使ってより細かな認証コンテキストを提供し、ID情報を適切なLambda関数に渡す