Amazon Cognito
開発者ガイド

ユーザープールのアプリクライアントの設定

ユーザープールを作成すると、ユーザーのサインアップとサインイン用の組み込みウェブページを使用するアプリを作成できます。AWS マネジメントコンソール を使用して、アプリクライアントや Amazon Cognito でホストされたドメインを追加するには、「アプリを追加して、ホストされたウェブの UI を有効にする」を参照してください。

アプリクライアントの設定の概要

有効な ID プロバイダー

ID プロバイダー (IdP) を選択してユーザーを認証できます。このサービスは、ユーザープールで実行するか、Facebook などのサードパーティーを通じて実行できます。IdP は、使用する前に有効にする必要があります。IdP は、少なくとも 1 つを有効にする必要があり、複数を有効にすることができます。外部 IdP の使用の詳細については、「サードパーティー経由のユーザープールへのサインインの追加」を参照してください。

コールバック URL

コールバック URL は、ユーザーがサインインに成功したときにリダイレクトされる先を指定します。少なくとも 1 つのコールバック URL を選択し、以下の条件を満たす必要があります。

  • 絶対 URI である。

  • クライアントに事前登録されている。

  • フラグメントコンポーネントを含まない。

OAuth 2.0 - リダイレクトエンドポイント」を参照してください。

Amazon Cognito では、テスト目的にのみ使用する http://localhost の場合を除き、HTTP ではなく HTTPS を使用します。

また、アプリのコールバック URL (例: myapp://example) もサポートされています。

サインアウト URL

サインアウト URL は、ユーザーがサインアウトしたときにリダイレクトされる先を指定します。

許可されている OAuth フロー

[Authorization code grant (認証コードの付与)] フローはコード付与フローを開始し、レスポンスとして認証コードを提供します。このコードは「トークンエンドポイント」を使用してアクセストークンと交換できます。トークンはエンドユーザーに直接公開されないため、侵害される可能性は低くなります。ただし、ユーザープールトークンの認証コードを交換するために、バックエンドでカスタムアプリケーションが必要です。

注記

セキュリティ上の理由から、モバイルアプリでは [Authorization code grant (認証コードの付与)] フローは PKCE を使用してのみ使用することを強くお勧めします。

[暗黙の付与] フローでは、クライアントがアクセストークン (およびスコープに基づいて、オプションで ID トークン) を「認証エンドポイント」から直接取得することを許可します。このフローは、アプリが [Authorization code grant (認証コードの付与)] フローを開始できない場合にのみ選択します。詳細については、「OAuth 2.0 の仕様」を参照してください。

[Authorization code grant (認証コードの付与)] と [Implicit code grant (暗黙的コードの付与)] の両方を有効にして、必要に応じて各権限を使用することができます。

[Client credentials (クライアント認証情報)] フローはマシン間の通信に使用されます。これにより、各自のリソースにアクセスするためのアクセストークンをリクエストできます。このフローは、ユーザーの代わりではなく、アプリがそれ自体のためにトークンをリクエストする場合に使用します。

注記

クライアント認証情報フローはユーザーに代わって使用されることがないため、このフローではカスタムスコープのみを使用できます。カスタムスコープは、各自のリソースサーバー用に定義したものです。「ユーザープールのリソースサーバーを定義する」を参照してください。

許可されている OAuth スコープ

次の OAuth スコープを 1 つ以上選択し、アクセストークン用にリクエストできるアクセス権限を指定します。

  • phone スコープは phone_number クレームおよび phone_number_verified クレームへのアクセスを付与します。このスコープは openid スコープを使用する場合にのみリクエストできます。

  • email スコープは email クレームおよび email_verified クレームへのアクセスを付与します。このスコープは openid スコープを使用する場合にのみリクエストできます。

  • openid スコープはクライアントが読み取り可能な ID トークン内のすべてのユーザー属性を返します。openid スコープがクライアントによってリクエストされない場合は、ID トークンは返されません。

  • aws.cognito.signin.user.admin スコープは、UpdateUserAttributesVerifyUserAttribute など、アクセストークンを必要とする Amazon Cognito ユーザープール API オペレーションへのアクセスを付与します。

  • profile スコープはクライアントが読み取り可能なすべてのユーザー属性へのアクセスを付与します。

許可されているカスタムスコープ

カスタムスコープは、[リソースサーバー] で各自のリソースサーバー用に定義したものです。形式は resource-server-identifier/scope です。「ユーザープールのリソースサーバーを定義する」を参照してください。

OAuth スコープについての詳細は、標準 OIDC スコープのリストを参照してください。

アプリクライアントを設定するには (AWS マネジメントコンソール)
  1. Amazon Cognito コンソールに移動します。AWS 認証情報を要求される場合があります。

  2. [ユーザープールの管理] を選択します。

  3. 編集するユーザープールを選択します。

  4. コンソールページの左側にあるナビゲーションバーで、[アプリクライアントの設定] を選択します。

  5. [Cognito ユーザープール] を [有効な ID プロバイダ] の 1 つとして選択し、これを IdP の 1 つとして含めます。少なくとも 1 つの IdP を有効にします。

    注記

    Facebook、Amazon、Google などの外部の ID プロバイダー (IdP) を使用してサインインするか、OpenID Connect (OIDC) や SAML IdP を通じてサインインするには、まず、これらを設定し、次に [アプリクライアントの設定] ページに戻ってプロバイダーを有効にします。詳細については、「サードパーティー経由のユーザープールへのサインインの追加」を参照してください。

  6. [サインインとサインアウトの URL] セクションで、[コールバック URL] をカンマで区切って入力します。

    ウェブアプリについては、URL は、https://www.example.com のように https:// で始まる必要があります。

    iOS または Android アプリの場合は、myapp:// などのコールバック URL を使用できます。

    注記

    コールバック URL やサインアウト URL は、ユーザープールのアプリクライアントで使用する前に、コンソール、CLI または API を使用して登録する必要があります。

  7. オプションの [サインアウト URL] をカンマで区切って入力します。

  8. [OAuth 2.0] のオプションを選択します。

    • Authorized code grant (承認済みコードの付与)

    • Implicit grant (暗黙の付与)

    • Client credentials (クライアント認証情報)

      クライアント認証情報を選択すると、他のオプションはクリアされ、標準スコープは使用できなくなります。

    1. コードの付与オプションと暗黙の付与オプションについては、[許可されている OAuth スコープ] からスコープを選択します。各スコープは 1 つ以上の標準属性のセットです。詳細については、「アプリクライアントの設定の概要」を参照してください。

    2. クライアント認証情報フローの場合、標準スコープは使用できません。クライアント認証情報フローはユーザーに代わって使用されることがないため、カスタムスコープのみを使用できます。カスタムスコープは、各自のリソースサーバー用に定義したものです。「ユーザープールのリソースサーバーを定義する」を参照してください。

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

アプリクライアントを設定するには (AWS CLI と AWS API)

AWS CLI を使用してユーザープールのアプリクライアントの更新、作成、説明、および削除を行うことができます。

以下の例では、「MyUserPoolID」と「MyAppClientID」を実際のユーザープールおよびアプリクライアント ID の値に置き換えてください。同様に、以下の例で使用されているパラメータ値も実際とは異なる場合があります。

注記

コールバック URL とログアウト URL は、JSON 形式を使用することで、CLI でリモートパラメータファイルとして処理されないようにします。

--callback-urls '["https://example.com"]'

--logout-urls '["https://example.com"]'

ユーザープールのアプリクライアントの更新 (AWS CLI と AWS API)

aws cognito-idp update-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls '["https://example.com"]' --supported-identity-providers '["MySAMLIdP", "LoginWithAmazon"]'

コマンドが成功すると、AWS CLI から確認情報が返されます。

{ "UserPoolClient": { "ClientId": "MyClientID", "SupportedIdentityProviders": [ "LoginWithAmazon", "MySAMLIdP" ], "CallbackURLs": [ "https://example.com" ], "AllowedOAuthScopes": [ "openid" ], "ClientName": "Example", "AllowedOAuthFlows": [ "implicit", "code" ], "RefreshTokenValidity": 30, "CreationDate": 1524628110.29, "AllowedOAuthFlowsUserPoolClient": true, "UserPoolId": "MyUserPoolID", "LastModifiedDate": 1530055177.553 } }

詳細については、AWS CLI コマンドリファレンスで「update-user-pool-client」を参照してください。

AWS API: UpdateUserPoolClient

ユーザープールのアプリクライアントの作成 (AWS CLI と AWS API)

aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp

詳細については、AWS CLI コマンドリファレンスで「create-user-pool-client」を参照してください。

AWS API: CreateUserPoolClient

ユーザープールのアプリクライアント情報の取得 (AWS CLI と AWS API)

aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --client-id MyClientID

詳細については、AWS CLI コマンドリファレンスで「describe-user-pool-client」を参照してください。

AWS API: DescribeUserPoolClient

ユーザープールのアプリクライアント情報の一覧表示 (AWS CLI と AWS API)

aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3

詳細については、AWS CLI コマンドリファレンスで「list-user-pool-clients」を参照してください。

AWS API: ListUserPoolClients

ユーザープールのアプリクライアントの削除 (AWS CLI と AWS API)

aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID"

詳細については、AWS CLI コマンドリファレンスで「delete-user-pool-client」を参照してください。

AWS API: DeleteUserPoolClient