翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
スコープ、M2M 、および APIs リソースサーバー
ユーザープールのドメインを設定すると、Amazon Cognito は、アプリケーションがユーザーに提示できるサインアップページとサインインページを使用して、2.0 OAuth 認証サーバーとホストされたウェブ UI を自動的にプロビジョニングします。詳細については、「ホストされた UI でアプリケーションクライアントを追加する」を参照してください。認可サーバーによってアクセストークンに追加するスコープを選択できます。スコープはリソースサーバーとユーザーデータへのアクセスを許可します。
リソースサーバーは 2.0 OAuth APIサーバーです。アクセス保護されたリソースを保護するために、ユーザープールからのアクセストークンに、API保護する でリクエストされたメソッドとパスを承認するスコープが含まれていることを確認します。トークンの署名に基づく発行者の検証、トークンの有効期限に基づく有効性の検証、トークンクレームのスコープに基づくアクセスレベルの検証を行います。ユーザープールスコープは、アクセストークンscope
クレームにあります。Amazon Cognito アクセストークンのクレームの詳細については、「アクセストークンについて」を参照してください。
Amazon Cognito を使用すると、アクセストークンのスコープは、外部属性APIsまたはユーザー属性へのアクセスを許可できます。アクセストークンは、ローカルユーザー、フェデレーティッドユーザー、またはマシン ID に発行できます。
API 認証
以下は、Amazon Cognito トークンAPIsを使用して へのリクエストを承認する方法の一部です。
- アクセストークン
-
Amazon Cognito オーソライザーをRESTAPIメソッドリクエスト設定に追加する場合は、オーソライザー設定に認証スコープを追加します。この設定では、 は
Authorization
ヘッダー内のアクセストークンAPIを受け入れ、承認されたスコープについてレビューします。 - ID トークン
-
で Amazon Cognito オーソライザーに有効な ID トークンを渡すとRESTAPI、APIGateway はリクエストを受け入れ、ID トークンの内容をAPIバックエンドに渡します。
- Amazon Verified Permissions
-
Verified Permissions には、APIリンクされたポリシーストア を作成するオプションがあります。Verified Permissions は、リクエスト
Authorization
ヘッダーから ID またはアクセストークンを処理する Lambda オーソライザーを作成して割り当てます。この Lambda オーソライザーは、トークンをポリシーストアに渡します。ここで、Verified Permissions はトークンをポリシーと比較し、オーソライザーに許可または拒否の決定を返します。
Machine-to-machine (M2M) 認証
Amazon Cognito は、マシン ID を使用してAPIデータにアクセスするアプリケーションをサポートしています。ユーザープール内のマシン ID は、アプリケーションサーバー上で実行され、リモート に接続する機密クライアントですAPIs。オペレーションは、スケジュールされたタスク、データストリーム、アセットの更新など、ユーザーとのやり取りなしで行われます。これらのクライアントがアクセストークンを使用してリクエストを承認すると、マシンツーマシン 、または M2M 認証を実行します。M2M 認証では、共有シークレットがアクセスコントロールのユーザー認証情報を置き換えます。
M2M 認証APIで にアクセスするアプリケーションには、クライアント ID とクライアントシークレットが必要です。ユーザープールでは、クライアント認証情報の許可をサポートするアプリケーションクライアントを構築する必要があります。クライアント認証情報をサポートするには、アプリケーションクライアントにクライアントシークレットとユーザープールドメインが必要です。このフローでは、マシン ID は から直接アクセストークンをリクエストしますトークンエンドポイント。クライアント認証情報の付与には、アクセストークン内のリソースサーバーからのカスタムスコープのみを許可できます。アプリケーションクライアントの設定の詳細については、「」を参照してくださいアプリケーションクライアントでのアプリケーション固有の設定。
クライアント認証情報グラントからのアクセストークンは、マシン ID が からリクエストすることを許可するオペレーションの検証可能なステートメントですAPI。アクセストークンがAPIリクエストを承認する方法の詳細については、「」をお読みください。アプリケーションの例については、Amazon Cognito および API Gateway ベースのマシンからマシンへの承認 AWS CDK
M2M 認証には、毎月のアクティブなユーザー (MAUs) への請求方法とは異なる請求モデルがあります。ユーザー認証にアクティブなユーザーあたりのコストがかかる場合、M2M 請求にはアクティブなクライアント認証情報アプリケーションクライアントとトークンリクエストの合計ボリュームが反映されます。詳細については、「Amazon Cognito の料金
AWS 請求書にコストを追加する Amazon Cognito オペレーションの最適化については、「」を参照してください のコスト管理。
スコープについて
スコープはアプリがリソースにリクエストできるアクセスのレベルです。Amazon Cognito アクセストークンのスコープは、ユーザープールで設定した信頼 (既知のデジタル署名を持つアクセストークンの信頼できる発行者) によってバックアップされます。ユーザープールは、顧客が自分のユーザープロファイルの一部または全部を管理できること、またはバックエンド からデータを取得できることを証明するスコープを持つアクセストークンを生成できますAPI。Amazon Cognito ユーザープールは、ユーザープールの予約APIスコープ 、カスタムスコープ 、および OpenID Connect (OIDC) スコープ を使用してアクセストークンを発行します。
ユーザープールの予約API済みスコープ
aws.cognito.signin.user.admin
スコープは、Amazon Cognito ユーザープール の現在のユーザーのセルフサービスオペレーションを許可しますAPI。アクセストークンのベアラが、 および UpdateUserAttributesAPIオペレーションなどを使用してベアラに関するすべての情報をクエリGetUserおよび更新することを許可します。Amazon Cognito ユーザープール でユーザーを認証するとAPI、アクセストークンで受け取るスコープはこれだけです。また、アプリケーションクライアントにユーザー属性の読み取りと書き込みを許可している場合、このユーザー属性の読み取りと書き込みに必要な唯一のスコープでもあります。このスコープは、認可エンドポイント へのリクエストでリクエストすることもできます。このスコープだけでは、userInfo エンドポイント にユーザー属性をリクエストするには不十分です。ユーザープールAPIとユーザーのuserInfo
リクエストの両方を承認するアクセストークンについては、 リクエストaws.cognito.signin.user.admin
で openid
と の両方のスコープを/oauth2/authorize
リクエストする必要があります。
カスタムスコープ
カスタムスコープは、リソースサーバーが保護APIsする外部へのリクエストを承認します。カスタムスコープを他の種類のスコープと一緒にリクエストできます。カスタムスコープの詳細については、このページ全体を通じて説明しています。
OpenID Connect (OIDC) スコープ
ホストされた UI を含むユーザープール認証サーバーでユーザーを認証する場合は、スコープをリクエストする必要があります。ユーザープールのローカルユーザーとサードパーティのフェデレーションユーザーは、Amazon Cognito 認可サーバーで認証できます。OIDC スコープは、アプリがユーザープールuserInfo エンドポイントの からユーザー情報を読み取ることを承認します。userInfo
エンドポイントからユーザー属性をクエリするOAuthモデルは、ユーザー属性に対する大量のリクエストに対してアプリを最適化できます。userInfo
エンドポイントは、アクセストークンのスコープによって決まるアクセス許可レベルで属性を返します。アプリケーションクライアントが以下のOIDCスコープを使用してアクセストークンを発行することを許可できます。
- openid
-
OpenID Connect (OIDC) クエリの最小スコープ。ID トークン、一意の識別子のクレーム
sub
、および他のスコープをリクエストする機能を承認します。注記
openid
スコープをリクエストし、それ以外をリクエストしない場合、ユーザープール ID トークンとuserInfo
レスポンスには、アプリケーションクライアントが読み取ることができるすべてのユーザー属性のクレームが含まれます。openid
、profile
、email
などの他のOIDCスコープをリクエストする場合phone
、ID トークンとuserInfoレスポンスの内容は追加のスコープの制約に限定されます。例えば、認可エンドポイント へのリクエストでパラメータ
scope=openid+email
を使用すると、sub
、email
、email_verified
を含む ID トークンが返されます。このリクエストのアクセストークンは、userInfo エンドポイント から同じ属性を返します。リクエストでパラメータscope=openid
を使用すると、ID トークンとuserInfo
内のクライアントが読み取り可能なすべての属性が返されます。 - profile
-
アプリクライアントが読み取ることができるすべてのユーザー属性を承認します。
-
ユーザー属性
email
およびemail_verified
を承認します。Amazon Cognito は、値が明示的に設定されている場合、email_verified
を返します。 - phone
-
ユーザー属性
phone_number
およびphone_number_verified
を承認します。
リソースサーバーについて
リソースサーバーAPIは、データベース内の情報へのアクセスを許可したり、IT リソースを制御したりできます。Amazon Cognito アクセストークンは、2.0 OAuth APIsをサポートする へのアクセスを承認できます。Amazon API Gateway RESTAPIsには、Amazon Cognito アクセストークンによる認証のサポートが組み込まれています。アプリケーションはAPI呼び出しのアクセストークンをリソースサーバーに渡します。リソースサーバーはアクセストークンを検査し、アクセスを付与するかどうかを決定します。
Amazon Cognito は、ユーザープールのアクセストークンのスキーマを将来更新する可能性があります。アプリケーションがアクセストークンの内容を に渡す前に分析する場合はAPI、スキーマの更新を受け入れるようにコードを設計する必要があります。
カスタムスコープはユーザーが定義するスコープであり、ユーザープールの承認機能を拡張して、ユーザーとユーザー属性のクエリや変更とは関係のない目的にも対応できるようにします。例えば、写真用のサーバーリソースがある場合、2 つのスコープを定義することが考えられます。写真への読み取りアクセス用の photos.read
と、書き込み/削除アクセス用の photos.write
です。認証用のアクセストークンを受け入れるAPIように を設定し、 scope
クレームphotos.read
内の を使用してトークンにアクセスするためのHTTP GET
リクエストと、 を使用してトークンへのHTTP POST
リクエストを付与できますphotos.write
。これらはカスタムスコープです。
注記
リソースサーバーはトークン内のクレームを処理する前に、アクセストークンの署名と有効期限を検証する必要があります。トークンの検証の詳細については、「JSON ウェブトークンの検証」を参照してください。Amazon API Gateway でのユーザープールトークンの検証と使用の詳細については、ブログAmazon Cognito ユーザープールとAPIゲートウェイの統合
概要
Amazon Cognito を使用すると、2.0 OAuth リソースサーバーを作成し、カスタムスコープを関連付けることができます。アクセストークンのカスタムスコープは、 の特定のアクションを承認しますAPI。ユーザープール内のどのアプリケーションクライアントに対しても、任意のリソースサーバーからカスタムスコープを発行することを許可できます。カスタムスコープをアプリケーションクライアントに関連付け、2.0 OAuth 認証コード許可、暗黙的な許可、およびクライアント認証情報許可でそれらのスコープを からリクエストしますトークンエンドポイント。Amazon Cognito は、アクセストークンの scope
クレームにカスタムスコープを追加します。クライアントはサーバーリソースに対してアクセストークンを使用して、トークンに存在するスコープに基づいて承認を判断できます。アクセストークンスコープの詳細については、「ユーザープールのトークンの使用」を参照してください。
カスタムスコープでアクセストークンを取得するには、アプリケーションが に認証コードのトークンエンドポイント引き換えまたはクライアント認証情報の付与のリクエストを行う必要があります。ホストされた UI では、暗黙的付与からアクセストークンのカスタムスコープをリクエストすることもできます。
注記
ユーザープールを IdP として人間によるインタラクティブ認証用に設計InitiateAuthされており、AdminInitiateAuthリクエストは単一の値 を持つアクセストークンにのみscope
クレームを生成しますaws.cognito.signin.user.admin
。
リソースサーバーおよびカスタムスコープの管理
リソースを作成するときに、リソースサーバー名とリソースサーバー識別子を指定する必要があります。リソースサーバーに作成したスコープごとに、スコープ名と説明を指定する必要があります。
-
リソースサーバー名: リソースサーバーのわかりやすい名前 (
Solar system object tracker
やPhoto API
など)。 -
リソースサーバーの識別子: リソースサーバーの一意の識別子。識別子は、 などAPI、 に関連付ける任意の名前です
solar-system-data
。API URI パスへのより直接的な参照https://solar-system-data-api.example.com
として などのより長い識別子を設定できますが、長い文字列はアクセストークンのサイズを大きくします。 -
スコープ名:
scope
クレームに必要な値。例えば、sunproximity.read
と指定します。 -
説明: スコープのわかりやすい説明。例えば、
Check current proximity to sun
と指定します。
Amazon Cognito では、ユーザープールのローカルユーザーであるか、サードパーティ ID プロバイダーのフェデレーションユーザーであるかに関係なく、すべてのユーザーのアクセストークンにカスタムスコープを含めることができます。ホストされた UI を含む OAuth 2.0 認証サーバーを使用して、認証フロー中にユーザーのアクセストークンの範囲を選択できます。ユーザーの認証は、リクエストパラメータの 1 つとして scope
を使用して 認可エンドポイント で開始する必要があります。リソースサーバーには次の形式が推奨されます。識別子には、APIわかりやすい名前を使用します。カスタムスコープには、リソースサーバーが許可するアクションを使用します。
resourceServerIdentifier
/scopeName
例えば、Kuiper ベルトで新しい小惑星を発見し、 solar-system-data
を通じて登録したいとしますAPI。小惑星のデータベースへの書き込み操作を許可するスコープは asteroids.add
です。検出の登録を許可するアクセストークンをリクエストする場合は、scope
HTTPSリクエストパラメータを にフォーマットしますscope=solar-system-data/asteroids.add
。
スコープをリソースサーバーから削除しても、すべのクライアントとの関連付けは削除されません。代わりに、スコープが inactive とマークされます。Amazon Cognito はアクセストークンに非アクティブなスコープを追加しませんが、それ以外はアプリからのスコープのリクエストを通常どおりに処理します。後でスコープをリソースサーバーに再度追加すると、Amazon Cognito はそのスコープを再度アクセストークンに書き込みます。アプリケーションクライアントに関連付けていないスコープをリクエストすると、ユーザープールのリソースサーバーからスコープを削除したかどうかに関係なく、認証は失敗します。
AWS Management Console、API、または を使用してCLI、ユーザープールのリソースサーバーとスコープを定義できます。
ユーザープールのリソースサーバーを定義する (AWS Management Console)
を使用して AWS Management Console 、ユーザープールのリソースサーバーを定義できます。
リソースサーバーを定義する
-
Amazon Cognito コンソール
にサインインします。 -
ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープールを選択します。
-
[App integration] (アプリケーションの統合) タブを開き、検索する [Resource servers] (リソースサーバー) を検索します。
-
[Create a resource server] (リソースサーバーの作成) を選択します。
-
[Resource server name] (リソースサーバー名) を入力します。例えば、
Photo Server
と指定します。 -
[Resource server identifier] (リソースサーバー識別子) を入力します。例えば、
com.example.photos
と指定します。 -
リソースの [Custom scopes] (カスタムスコープ) (例:
read
およびwrite
) を入力します。 -
[Scope name] (スコープ名) ごとに [Description] (説明) (例:
view your photos
およびupdate your photos
) を入力します。 -
[Create] (作成) を選択します。
カスタムスコープは、[Custom scopes] (カスタムスコープ) 列にある、[Resource servers] (リソースサーバー) の [App integration] (アプリケーションの統合) タブで確認できます。カスタムスコープは、アプリケーションクライアントに対して [App integration] (アプリケーションクライアント) タブの下にある [App integration] (アプリケーションの統合) で有効にできます。アプリケーションクライアントを選択し、[Hosted UI settings] (ホストされた UI の設定) を検索して [Edit] (編集) を選択します。[Custom scopes] (カスタムスコープ) を追加し、[Save changes] (変更の保存) を選択します。
ユーザープールのリソースサーバーの定義 (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