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

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

ユーザープールを作成した後は、ユーザーのサインアップとサインインに組み込みウェブページを使用するようにアプリクライアントを設定できます。用語については、「アプリクライアントの設定用語」を参照してください。

Original console
  1. Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力します。

  2. [Manage User Pools] (ユーザープールの管理) をクリックします。

  3. リストから既存のユーザープールを選択、またはユーザープールを作成します。

  4. ページの左側にあるナビゲーションバーで、[General settings] (全般設定) の [App clients] (アプリクライアント) を選択します。

  5. [Add an app client] (アプリクライアントの追加) をクリックします。

  6. アプリ名を入力します。

  7. 認証フローで必要な場合を除き、[Generate client secret] (クライアントシークレットを生成) オプションはオフにします。クライアントシークレットは、アプリケーションのサーバー側のコンポーネントでクライアントシークレットを保護できる場合に使用します。

  8. (オプション) トークンの有効期限設定を変更します。

  9. [Auth Flows Configuration] (認証フローの設定) オプションを選択します。ユーザープール認証の詳細については、「User Pool Authentication Flow」(ユーザープール認証フロー) を参照してください。

  10. [Security configuration] (セキュリティ設定) を選択します。[Enabled] (有効) を選択することが推奨されます。

  11. [Set attribute read and write permissions] (属性の読み込みおよび書き込みアクセス権限を設定する) をクリックします。

  12. [Create app client] (アプリクライアントの作成) をクリックします。

  13. [App client id] (アプリクライアント ID) をメモしておきます。

  14. [Return to pool details] (プールの詳細に戻る) を選択します。

New console
  1. Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力します。

  2. [User Pools] (ユーザープール) を選択します。

  3. リストから既存のユーザープールを選択、またはユーザープールを作成します。

  4. [App integration] (アプリの統合) タブを選択します。

  5. [App clients] (アプリクライアント) で、[Create an app client] (アプリクライアントの作成) を選択します。

  6. [App type] (アプリケーションタイプ) を選択します。[Public client] (パブリッククライアント)、[Confidential client] (機密保持クライアント)、または [Other] (その他)。パブリッククライアントは通常、ユーザーのデバイスから操作し、認証されていない API とトークン認証された API を使用します。機密クライアントは通常、クライアントシークレットと API 認証情報で信頼する中央サーバー上のアプリから操作し、承認ヘッダーと AWS Identity and Access Management 認証情報を使用してリクエストに署名します。ユースケースが、パブリッククライアントまたは機密保持クライアントの事前構成されたアプリクライアント設定と異なる場合、その他を選択します。

  7. [App client name] (アプリクライアント名) を入力します。

  8. アプリクライアントで許可したい [Authentication flows] (認証のフロー) を選択します。ユーザープール認証の詳細については、「User Pool Authentication Flow」(ユーザープール認証フロー) を参照してください。

  9. (オプション) トークンの有効期限を設定します。

    1. アプリクライアントの [Refresh token expiration] (トークンの有効期限を更新) を指定します。デフォルト値は 30 日です。これは、1 時間から 10 年の任意の値に変更できます。

    2. アプリクライアントの [Access token expiration] (アクセストークンの有効期限) を指定します。デフォルト値は 1 時間です。これは、5 分から 24 時間の任意の値に変更できます。

    3. アプリクライアントの [ID token expiration] (ID トークンの有効期限) を指定します。デフォルト値は 1 時間です。これは、5 分から 24 時間の任意の値に変更できます。

      重要

      ホストされた UI を使用してトークンの有効期間を1時間未満に設定した場合、ユーザーは、現在 1 時間に固定されているセッション cookie の期間に基づいてトークンを使用できるようになります。

  10. [Generate client secret] (クライアントシークレットの生成) を選択して、 Amazon Cognito にクライアントシークレットを生成させます。クライアントシークレットは通常、機密クライアントに関連付けられます。

  11. このアプリクライアントに、[Enable token revocation] (トークンの失効を有効化) するかどうかを選択してください。これにより、Amazon Cognito が発行するトークンサイズが増加します。トークンの取り消しの詳細については、「Revoking Tokens」を参照してください。

  12. このアプリのクライアントに対して、[Prevent error messages that reveal user existence] (ユーザーの存在を知らせるエラーメッセージを表示しない) ようにするか選択します。Amazon Cognito は、ユーザー名またはパスワードのいずれかが間違っているという一般的なメッセージで、存在しないユーザーのサインインリクエストに応答します。

  13. (オプション) このアプリクライアントに、[Attribute read and write permissions] (属性の読み取りと書き込みのアクセス許可) を構成します。アプリクライアントは、ユーザープールの属性スキーマの限定サブセットに対してのみ、読み取りと書き込みの許可が得られます。詳細については、「Attribute Permissions and Scopes」(属性の許可と範囲) を参照してください。

  14. [Create] (作成) を選択します。

  15. [Client id] (クライアント ID) を書き留めます。これにより、サインアップリクエストとサインインリクエストでアプリクライアントを識別します。

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

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

注記

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

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

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

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

AWS CLI で、次のコマンドを入力します。

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

アプリクライアントの設定用語

以下の用語と定義は、アプリクライアントを設定するうえで役立ちます。

有効な ID プロバイダー

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

コールバック URL

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

  • 絶対 URI である。

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

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

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

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

また、アプリのコールバック 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 スコープは、UpdateUserAttributes および VerifyUserAttribute などのアクセストークンを必要とする Amazon Cognito ユーザープール API 操作へのアクセス権を付与します。

  • profile スコープはクライアントが読み取り可能なすべてのユーザー属性へのアクセスを付与します。このスコープは openid スコープを使用する場合にのみリクエストできます。

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

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

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