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

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

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

  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. 認証フローセッション持続期間を設定します。これは、セッショントークンが期限切れになる前にユーザーが各認証チャレンジを完了しなければならない期間です。

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

    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 の期間に基づいてトークンを使用できるようになります。

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

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

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

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

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

  16. [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, "AuthSessionValidity": 3, "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 スコープは、OpenID Connect 仕様に沿ったスコープを取得することを宣言しています。openid スコープをリクエストしない限り、Amazon Cognito は ID トークンを返しません。

  • aws.cognito.signin.user.admin スコープは、UpdateUserAttributes および VerifyUserAttribute などのアクセストークンを必要とする Amazon Cognito ユーザープール API 操作へのアクセス権を付与します。

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

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

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

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