Amazon Cognito
開発者ガイド

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

ユーザープール用にドメインを設定すると、Amazon Cognito サービスでホストされたウェブ UI が自動的にプロビジョンされるため、アプリケーションにサインアップページとサインインページを追加できるようになります。詳細については、「ステップ 2.アプリケーションを追加して、ホストされたウェブの UI を有効にする」を参照してください。

リソースサーバーは、アクセス保護されたリソース用のサーバーです。アクセストークンを持つアプリからの認証済みリクエストを処理します。通常、リソースサーバーはこれらのアクセスリクエストを行うために CRUD API を提供します。この API は、Amazon API Gateway、あるいは AWS の外部でホストされます。アプリは、API コール内でアクセストークンをリソースサーバーに渡します。アプリはアクセストークンをアクセスリクエストに渡す際に不透明型として渡す必要があります。リソースサーバーはアクセストークンを検査し、アクセスを付与するかどうかを決定します。

注記

リソースサーバーはトークン内のクレームを処理する前に、アクセストークンの署名と有効期限を検証する必要があります。ユーザープールトークンの検証および使用の詳細については、 このブログ記事を参照してください。 Amazon API Gateway はアクセストークンを検証してリソースを保護するために推奨されるオプションです。API Gateway カスタムオーソライザーの詳細については、「API Gateway カスタムオーソライザーの使用」を参照してください。

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

概要

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

注記

リソースサーバーはトークン内のクレームを処理する前に、アクセストークンの署名と有効期限を検証する必要があります。

注記

アプリクライアントにクライアントシークレットがある場合、アプリクライアントはクライアント認証情報フローのみを使用できます。

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

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

例:

  • 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 マネジメントコンソール、API、および CLI を使用して、ユーザープールのリソースサーバーとスコープを定義できます。

ユーザープールのリソースサーバーを定義する (AWS マネジメントコンソール)

AWS マネジメントコンソールを使用して、ユーザープールのリソースサーバーを定義できます。

リソースサーバーを定義するには

  1. Amazon Cognito コンソールにサインインします。

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

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

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

  5. リソースサーバーの名前 (例:Photo Server) を入力します。

  6. リソースサーバーの識別子 (例:com.example.photos) を入力します。

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

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

  9. [Save changes] を選択します。

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

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

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

リソースサーバーを作成するには

リソースサーバーの設定に関する情報を取得するには

ユーザープールのすべてのリソースサーバーに関する情報を一覧表示するには

リソースサーバーを削除するには

リソースサーバーの設定を更新するには