ユーザープールのリソースサーバーを定義する
ユーザープールのドメインを設定すると、Amazon Cognito は、ユーザーに提示できるサインアップページとサインインページを備えた、ホストされたウェブ UI を自動的にプロビジョニングします。詳細については、「ステップ 2. アプリクライアントを追加してホストされた UI を設定する」を参照してください。
リソースサーバーとは、OAuth 2.0 API サーバー
リソースサーバー API は、データベース内の情報へのアクセスを許可したり、IT リソースを制御したりすることができます。Amazon Cognito のアクセストークンは、OAuth 2.0 をサポートする API へのアクセスを許可できます。Amazon API Gateway REST API には、Amazon Cognito のアクセストークンによる認証の組み込みサポートがあります。アプリは、API コール内でアクセストークンをリソースサーバーに渡します。アプリはアクセストークンをアクセスリクエストに渡す際に不透明型として渡す必要があります。リソースサーバーはアクセストークンを検査し、アクセスを付与するかどうかを決定します。
リソースサーバーはトークン内のクレームを処理する前に、アクセストークンの署名と有効期限を検証する必要があります。ユーザープールトークンの検証と使用の詳細については、AWSブログの「Amazon Cognito ユーザープールと API Gateway の統合
スコープはアプリがリソースにリクエストできるアクセスのレベルです。たとえば、写真用のサーバーリソースがある場合、2 つのスコープを定義することが考えられます。1 つは写真への読み込みアクセスであり、1 つは書き込み/削除アクセスです。アプリケーションが API コールを行ってアクセスをリクエストしアクセストークンを渡す際、そのトークンには 1 つ以上のスコープが内部に埋め込まれます。
概要
Amazon Cognito を使用すると、アプリの開発者は独自の OAuth2.0 リソースサーバーを作成し、それらにカスタムスコープを関連付けることができます。カスタムスコープをアプリのクライアントに関連付けると、アプリは OAuth2.0 認証コード付与、暗黙的付与、クライアント認証情報付与でそれらのスコープを トークンエンドポイント からリクエストできます。Amazon Cognito は、アクセストークンの scope
クレームでカスタムスコープを渡します。クライアントはサーバーリソースに対してアクセストークンを使用して、トークンに存在するスコープに基づいて承認を判断できます。アクセストークンスコープの詳細については、「ユーザープールのトークンの使用」を参照してください。

カスタムスコープでアクセストークンを取得するには、アプリは認証コードを引き換えるか、クライアント認証情報の付与をリクエストするために、トークンエンドポイント にリクエストを行う必要があります。ホストされた UI では、暗黙的付与からアクセストークンのカスタムスコープをリクエストすることもできます。
これらはヒューマンインタラクティブ認証用に設計されているため、InitiateAuth
および AdminInitiateAuth
リクエストはカスタムスコープを含まないアクセストークンを生成します。
リソースサーバーおよびカスタムスコープの管理
リソースを作成するときに、リソースサーバー名とリソースサーバー識別子を指定する必要があります。リソースサーバーに作成したスコープごとに、スコープ名と説明を指定する必要があります。
例:
-
Name
: リソースサーバーのわかりやすい名前 (Weather API
やPhoto 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を使用して、ユーザープールのリソースサーバーを定義できます。
ユーザープールのリソースサーバーを定義する (AWS CLI および AWS API)
次のコマンドを使用して、ユーザープールのリソースサーバー設定を指定します。
リソースサーバーを作成する
-
AWS CLI:
aws cognito-idp create-resource-server
-
AWS API: CreateResourceServer
リソースサーバーの設定に関する情報を取得する
-
AWS CLI:
aws cognito-idp describe-resource-server
-
AWS API: DescribeResourceServer
ユーザープールのすべてのリソースサーバーに関する情報を一覧表示する
-
AWS CLI:
aws cognito-idp list-resource-servers
-
AWS API: ListResourceServers
リソースサーバーを削除する
-
AWS CLI:
aws cognito-idp delete-resource-server
-
AWS API: DeleteResourceServer
リソースサーバーの設定を更新する
-
AWS CLI:
aws cognito-idp update-resource-server
-
AWS API: UpdateResourceServer