ユーザープールのリソースサーバーを定義する - Amazon Cognito

ユーザープールのリソースサーバーを定義する

ユーザープールのドメインを設定すると、Amazon Cognito は、ユーザーに提示できるサインアップページとサインインページを備えた、ホストされたウェブ UI を自動的にプロビジョニングします。詳細については、「ステップ 2. アプリクライアントを追加してホストされた UI を設定する」を参照してください。

リソースサーバーとは、OAuth 2.0 API サーバーのことです。アクセス保護されたリソースを保護するために、アプリからのアクセストークンを検証し、API へのアクセスを許可します。トークンの署名に基づいて発行者を検証し、トークンの有効期限に基づく有効性を検証し、トークンクレームのスコープに基づいてアクセスレベルを検証します。

リソースサーバー API は、データベース内の情報へのアクセスを許可したり、IT リソースを制御したりすることができます。Amazon Cognito のアクセストークンは、OAuth 2.0 をサポートする API へのアクセスを許可できます。Amazon API Gateway REST API には、Amazon Cognito のアクセストークンによる認証の組み込みサポートがあります。アプリは、API コール内でアクセストークンをリソースサーバーに渡します。アプリはアクセストークンをアクセスリクエストに渡す際に不透明型として渡す必要があります。リソースサーバーはアクセストークンを検査し、アクセスを付与するかどうかを決定します。

注記

リソースサーバーはトークン内のクレームを処理する前に、アクセストークンの署名と有効期限を検証する必要があります。ユーザープールトークンの検証と使用の詳細については、AWSブログの「Amazon Cognito ユーザープールと API Gateway の統合」を参照してください。Amazon API Gateway は、アクセストークンの検証とリソースの保護に最適なオプションです。API Gateway カスタムオーソライザーの詳細については、「API Gateway Lambda オーソライザーを使用する」を参照してください。

スコープはアプリがリソースにリクエストできるアクセスのレベルです。たとえば、写真用のサーバーリソースがある場合、2 つのスコープを定義することが考えられます。1 つは写真への読み込みアクセスであり、1 つは書き込み/削除アクセスです。アプリケーションが API コールを行ってアクセスをリクエストしアクセストークンを渡す際、そのトークンには 1 つ以上のスコープが内部に埋め込まれます。

概要

Amazon Cognito を使用すると、アプリの開発者は独自の OAuth2.0 リソースサーバーを作成し、それらにカスタムスコープを関連付けることができます。カスタムスコープをアプリのクライアントに関連付けると、アプリは OAuth2.0 認証コード付与、暗黙的付与、クライアント認証情報付与でそれらのスコープを トークンエンドポイント からリクエストできます。Amazon Cognito は、アクセストークンの scope クレームでカスタムスコープを渡します。クライアントはサーバーリソースに対してアクセストークンを使用して、トークンに存在するスコープに基づいて承認を判断できます。アクセストークンスコープの詳細については、「ユーザープールのトークンの使用」を参照してください。


            リソースサーバーのフローの概要。クライアントはカスタムスコープでの付与をリクエストし、ユーザープールはカスタムスコープでアクセストークンを返し、クライアントはアクセストークンを API に提示します。

カスタムスコープでアクセストークンを取得するには、アプリは認証コードを引き換えるか、クライアント認証情報の付与をリクエストするために、トークンエンドポイント にリクエストを行う必要があります。ホストされた UI では、暗黙的付与からアクセストークンのカスタムスコープをリクエストすることもできます。

注記

これらはヒューマンインタラクティブ認証用に設計されているため、InitiateAuth および AdminInitiateAuth リクエストはカスタムスコープを含まないアクセストークンを生成します。

リソースサーバーおよびカスタムスコープの管理

リソースを作成するときに、リソースサーバー名とリソースサーバー識別子を指定する必要があります。リソースサーバーに作成したスコープごとに、スコープ名と説明を指定する必要があります。

例:

  • Name: リソースサーバーのわかりやすい名前 (Weather APIPhoto API など)。

  • Identifier: リソースサーバーの一意の識別子。これは、リソースサーバーが存在する HTTPS エンドポイントにすることもできます。例えば、https://my-weather-api.example.com

  • Scope Name: スコープ名。例えば、weather.read

  • Scope Description: スコープの簡単な説明。例えば、Retrieve weather information です。

クライアントアプリが OAuth2.0 フローのいずれかでカスタムスコープをリクエストする場合、スコープの完全識別子 (resourceServerIdentifier/scopeName) をリクエストする必要があります。たとえば、リソースサーバー識別子が https://myphotosapi.example.com でありスコープ名が photos.read である場合、クライアントアプリは実行時に https://myphotosapi.example.com/photos.read をリクエストする必要があります。

スコープをリソースサーバーから削除しても、すべのクライアントとの関連付けは削除されません。代わりにスコープは非アクティブになります。クライアントアプリケーションの実行時に削除されたスコープをリクエストすると、スコープは無視されアクセストークンには含まれません。スコープが後で再度追加されると、再度アクセストークンに含まれるようになります。

スコープがクライアントから削除されると、クライアントとスコープ間の関連付けが削除されます。クライアントの実行時に許可されていないスコープがリクエストされるとエラーが発生し、アクセストークンは発行されません。

AWS Management Console、API、または CLI を使用して、ユーザープールのリソースサーバーとスコープを定義できます。

ユーザープールのリソースサーバーを定義する (AWS Management Console)

AWS Management Consoleを使用して、ユーザープールのリソースサーバーを定義できます。

Original console
リソースサーバーを定義する
  1. Amazon Cognito コンソールにサインインします。プロンプトが表示されたら、AWS 認証情報を入力します。

  2. ナビゲーションペインで、[Manage User Pools] (ユーザープールの管理) を選択してから、編集するユーザープールを選択します。

  3. [リソースサーバー] タブを選択します。

  4. [リソースサーバーの追加] を選択します。

  5. リソースサーバーの名前を入力します。例えば、Photo Server です。

  6. リソースサーバーの識別子を入力します。例えば、com.example.photos です。

  7. リソースのカスタムスコープの名前 (例: read および write) を入力します。

  8. [Scope name] (スコープ名) ごとに [Description] (説明) (例: view your photos および update your photos) を入力します。

  9. [Save changes] (変更の保存) をクリックします。

定義したカスタムスコープはそれぞれ、[OAuth2.0 Allowed Custom Scopes] (OAuth2.0 の許可されているカスタムスコープ) の [App client settings] (アプリケーションクライアントの設定) タブに表示されます (例: com.example.photos/read)。

New console
リソースサーバーを定義する
  1. Amazon Cognito コンソールにサインインします。

  2. ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープールを選択します。

  3. [App integration] (アプリケーションの統合) タブを開き、検索する [Resource servers] (リソースサーバー) を検索します。

  4. [Create a resource server] (リソースサーバーの作成) を選択します。

  5. [Resource server name] (リソースサーバー名) を入力します。例えば、Photo Server です。

  6. [Resource server identifier] (リソースサーバー識別子) を入力します。例えば、com.example.photos です。

  7. リソースの [Custom scopes] (カスタムスコープ) (例: read および write ) を入力します。

  8. [Scope name] (スコープ名) ごとに [Description] (説明) (例: view your photos および update your photos) を入力します。

  9. [Create] を選択します。

カスタムスコープは、[Custom scopes] (カスタムスコープ) 列にある、[Resource servers] (リソースサーバー) の [App integration] (アプリケーションの統合) タブで確認できます。カスタムスコープは、アプリケーションクライアントに対して [App integration] (アプリケーションクライアント) タブの下にある [App integration] (アプリケーションの統合) で有効にできます。アプリケーションクライアントを選択し、[Hosted UI settings] (ホストされた UI の設定) を検索して [Edit] (編集) を選択します。[Custom scopes] (カスタムスコープ) を追加し、[Save changes] (変更の保存) を選択します。

ユーザープールのリソースサーバーを定義する (AWS CLI および AWS API)

次のコマンドを使用して、ユーザープールのリソースサーバー設定を指定します。

リソースサーバーを作成する
リソースサーバーの設定に関する情報を取得する
ユーザープールのすべてのリソースサーバーに関する情報を一覧表示する
リソースサーバーを削除する
リソースサーバーの設定を更新する