スコープ、M2M 、および APIs リソースサーバー - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

スコープ、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 の料金」を参照してください。M2M 認証のコストを制御するには、アクセストークンの期間とアプリケーションが行うトークンリクエストの数を最適化します。API ゲートウェイキャッシュを使用して M2M 認証の新しいトークンのリクエストを減らす方法については、ユーザープールトークンの有効期限とキャッシュの管理「」を参照してください。

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.adminopenidと の両方のスコープを/oauth2/authorizeリクエストする必要があります。

カスタムスコープ

カスタムスコープは、リソースサーバーが保護APIsする外部へのリクエストを承認します。カスタムスコープを他の種類のスコープと一緒にリクエストできます。カスタムスコープの詳細については、このページ全体を通じて説明しています。

OpenID Connect (OIDC) スコープ

ホストされた UI を含むユーザープール認証サーバーでユーザーを認証する場合は、スコープをリクエストする必要があります。ユーザープールのローカルユーザーとサードパーティのフェデレーションユーザーは、Amazon Cognito 認可サーバーで認証できます。OIDC スコープは、アプリがユーザープールuserInfo エンドポイントの からユーザー情報を読み取ることを承認します。userInfo エンドポイントからユーザー属性をクエリするOAuthモデルは、ユーザー属性に対する大量のリクエストに対してアプリを最適化できます。userInfo エンドポイントは、アクセストークンのスコープによって決まるアクセス許可レベルで属性を返します。アプリケーションクライアントが以下のOIDCスコープを使用してアクセストークンを発行することを許可できます。

openid

OpenID Connect (OIDC) クエリの最小スコープ。ID トークン、一意の識別子のクレーム sub、および他のスコープをリクエストする機能を承認します。

注記

openid スコープをリクエストし、それ以外をリクエストしない場合、ユーザープール ID トークンと userInfo レスポンスには、アプリケーションクライアントが読み取ることができるすべてのユーザー属性のクレームが含まれます。openidprofileemailなどの他のOIDCスコープをリクエストする場合phone、ID トークンとuserInfoレスポンスの内容は追加のスコープの制約に限定されます。

例えば、認可エンドポイント へのリクエストでパラメータ scope=openid+email を使用すると、subemailemail_verified を含む ID トークンが返されます。このリクエストのアクセストークンは、userInfo エンドポイント から同じ属性を返します。リクエストでパラメータ scope=openid を使用すると、ID トークンと userInfo 内のクライアントが読み取り可能なすべての属性が返されます。

profile

アプリクライアントが読み取ることができるすべてのユーザー属性を承認します。

email

ユーザー属性 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ゲートウェイの統合」を参照してください。API Gateway は、アクセストークンを検査し、リソースを保護するのに適したオプションです。API Gateway Lambda オーソライザーの詳細については、API「Gateway Lambda オーソライザーの使用」を参照してください。

概要

Amazon Cognito を使用すると、2.0 OAuth リソースサーバーを作成し、カスタムスコープを関連付けることができます。アクセストークンのカスタムスコープは、 の特定のアクションを承認しますAPI。ユーザープール内のどのアプリケーションクライアントに対しても、任意のリソースサーバーからカスタムスコープを発行することを許可できます。カスタムスコープをアプリケーションクライアントに関連付け、2.0 OAuth 認証コード許可、暗黙的な許可、およびクライアント認証情報許可でそれらのスコープを からリクエストしますトークンエンドポイント。Amazon Cognito は、アクセストークンの scope クレームにカスタムスコープを追加します。クライアントはサーバーリソースに対してアクセストークンを使用して、トークンに存在するスコープに基づいて承認を判断できます。アクセストークンスコープの詳細については、「ユーザープールのトークンの使用」を参照してください。

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

カスタムスコープでアクセストークンを取得するには、アプリケーションが に認証コードのトークンエンドポイント引き換えまたはクライアント認証情報の付与のリクエストを行う必要があります。ホストされた 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 です。検出の登録を許可するアクセストークンをリクエストする場合は、scopeHTTPSリクエストパラメータを にフォーマットしますscope=solar-system-data/asteroids.add

スコープをリソースサーバーから削除しても、すべのクライアントとの関連付けは削除されません。代わりに、スコープが inactive とマークされます。Amazon Cognito はアクセストークンに非アクティブなスコープを追加しませんが、それ以外はアプリからのスコープのリクエストを通常どおりに処理します。後でスコープをリソースサーバーに再度追加すると、Amazon Cognito はそのスコープを再度アクセストークンに書き込みます。アプリケーションクライアントに関連付けていないスコープをリクエストすると、ユーザープールのリソースサーバーからスコープを削除したかどうかに関係なく、認証は失敗します。

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

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

を使用して AWS Management 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)

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

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