ユーザープールのアプリケーションクライアントの設定
アプリケーションは、認証されていない API 操作を呼び出すための許可を持つユーザープール内のエンティティです。認証されていない API オペレーションは、認証されたユーザーを持たないオペレーションです。この例には、登録、サインイン、忘れたパスワードの処理などの操作があります。これらの API を呼び出すには、アプリクライアント ID とオプションのクライアントシークレットが必要です。アプリクライアント ID またはシークレットをセキュア化して、認証されたクライアントアプリのみがこれらの認証されていない API を呼び出すことができるようにするのは、お客様の責任です。
ユーザープールには複数のアプリを作成できます。通常、アプリケーションはアプリケーションのプラットフォームに対応します。例えば、サーバー側アプリケーション用のアプリと、別の Android アプリを作成することができます。各アプリには独自のアプリのクライアント ID があります。
Amazon Cognito でアプリクライアントを作成する際、標準の OAuth クライアントタイプであるパブリッククライアントと機密クライアントに基づいたオプションを事前に入力できます。クライアントシークレットを持つ機密クライアントを設定します。
- パブリッククライアント
-
パブリッククライアントは、ブラウザまたはモバイルデバイスで実行されます。信頼できるサーバー側リソースがないため、クライアントシークレットはありません。
- 機密クライアント
-
機密クライアントには、認証されていない API オペレーションのクライアントシークレットで信頼できるサーバー側のリソースがあります。アプリケーションは、バックエンドサーバー上でデーモンまたはシェルスクリプトとして実行されることがあります。
- クライアントシークレット
-
クライアントシークレットは、アプリクライアントへのすべての API リクエストでアプリが使用する必要がある固定文字列です。アプリクライアントには、アプリクライアントには、client_credentials
付与を実行するためのクライアントシークレットが必要です。
アプリを作成した後は、シークレットを変更できません。シークレットキーを更新したい場合、新規のシークレットで新しいアプリケーションを作成できます。また、そのアプリのクライアント ID を使用するアプリケーションからのアクセスを遮断するためにアプリケーションを削除できます。
パブリックアプリでは、機密クライアントとクライアントシークレットを使用できます。Amazon CloudFront プロキシを使用して、転送中の SECRET_HASH
を追加します。詳細については、AWSブログの「Amazon CloudFront プロキシを使用して Amazon Cognito のパブリッククライアントを保護する」を参照してください。
アプリケーションクライアント (AWS Management Console) の作成
- Original console
-
アプリクライアントを作成する (コンソール)
-
Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力します。
-
[User Pools] (ユーザープール) を選択します。
-
リストから既存のユーザープールを選択するか、ユーザープールを作成します。
-
[App integration] (アプリケーションの統合) タブを選択します。[App clients] (アプリケーションクライアント) を検索し、[Create an app client] (アプリケーションクライアントを作成する) を選択します。
-
[Add app client] (アプリクライアントの追加) を選択します。
-
[Add an app client] を選択します。
-
[App client name] (アプリケーションクライアント名) を入力します。
-
アプリケーションの [Refresh token expiration] (トークンの有効期限を更新) を指定します。デフォルト値は 30 日です。このデフォルトは、1 時間から 10 年の任意の値に変更できます。
-
アプリケーションの [Access token expiration] (アクセストークンの有効期限) を指定します。デフォルト値は 1 時間です。このデフォルトは、5 分から 24 時間の任意の値に変更できます。
-
アプリケーションの [ID token expiration] (ID トークンの有効期限) を指定します。デフォルト値は 1 時間です。このデフォルトは、5 分から 24 時間の任意の値に変更できます。
ホストされた UI を使用しており、トークンの有効期限を 1 時間未満に設定する場合、ユーザーは、1 時間後に期限が切れるセッション cookie に基づいて新しいトークンを取得できます。この Cookie の有効期間を変更できません。
-
デフォルトでは、ユーザープールによりアプリのクライアントシークレットが生成されます。クライアントシークレットが必要ない場合は、[Generate client secret] (クライアントシークレットの生成) をクリアします。
-
サーバーアプリケーションがデベロッパー認証情報を必要とし (署名バージョン 4 を使用)、セキュアリモートパスワード (SRP) 認証を使用しない場合は、[Enable username password auth for admin APIs for authentication (ALLOW_ADMIN_USER_PASSWORD_AUTH)] (認証用の管理 API のユーザー名パスワード認証を有効にする (ALLOW_ADMIN_USER_PASSWORD_AUTH)) を選択してサーバー側の認証を有効化します。詳細については、「管理認証フロー」を参照してください。
-
[Prevent User Existence Errors] (ユーザー存在エラーを防ぐ) で、[Legacy] (レガシー) または [Enabled] (有効) を選択します。詳細については、「エラーレスポンスの管理」を参照してください。
-
デフォルトで、ユーザープールはアプリによるすべての属性の読み取りと書き込みの権限を与えます。アプリケーションに異なる権限を設定する場合、以下のステップを完了します。それ以外の場合は、ステップ 15 に進みます。
-
[属性の読み込みおよび書き込みアクセス権限を設定する] を選択します。
-
以下のいずれかを行って、読み取りと書き込み許可を設定します。
必須属性はアプリケーションの書き込みアクセス権限から削除できません。
-
[Create app client] を選択します。
-
別のアプリを作成する場合、[Add an app (アプリの追加)] を選択します。
-
必要なアプリをすべて作成したら、[Return to pool details] (プールの詳細に戻る) をクリックしてその他のフィールドを更新し、[Create pool] (プールの作成) をクリックします。
- New console
-
アプリクライアントを作成する (コンソール)
-
Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力します。
-
[User Pools] (ユーザープール) を選択します。
-
リストから既存のユーザープールを選択するか、ユーザープールを作成します。
-
[App integration] (アプリケーションの統合) タブを選択します。
-
[App clients] (アプリケーションクライアント) で、[Create an app client] (アプリケーションクライアントの作成) を選択します。
-
[App type] (アプリケーションタイプ) を選択します。[Public client] (パブリッククライアント)、[Confidential client] (機密保持クライアント)、または [Other] (その他)。
-
[App client name] (アプリケーションクライアント名) を入力します。
-
アプリケーションクライアントで許可したい [Authentication flows] (認証のフロー) を選択します。
-
認証フローセッション持続期間を設定します。これは、セッショントークンが期限切れになる前にユーザーが各認証チャレンジを完了しなければならない期間です。
-
(オプション) トークンの有効期限を設定する場合は、以下の手順を実行します。
-
アプリケーションクライアントの [Refresh token expiration] (トークンの有効期限を更新) を指定します。デフォルト値は 30 日です。これは、1 時間から 10 年の任意の値に変更できます。
-
アプリケーションクライアントの [Access token expiration] (アクセストークンの有効期限) を指定します。デフォルト値は 1 時間です。これは、5 分から 24 時間の任意の値に変更できます。
-
アプリケーションクライアントの [ID token expiration] (ID トークンの有効期限) を指定します。デフォルト値は 1 時間です。これは、5 分から 24 時間の任意の値に変更できます。
ホストされた UI を使用してトークンの有効期間を1時間未満に設定した場合、ユーザーは、現在 1 時間に固定されているセッション cookie の期間に基づいてトークンを使用できるようになります。
-
[Generate client secret] (クライアントシークレットの生成) を選択して、 Amazon Cognito にクライアントシークレットを生成させます。クライアントシークレットは通常、機密クライアントに関連付けられます。
-
このアプリケーションクライアントに、[Enable token revocation] (トークンの失効を有効化) するかどうかを選択してください。これにより、Amazon Cognito が発行するトークンサイズが増加します。
-
このアプリケーションのクライアントに対して、[Prevent error messages that reveal user existence] (ユーザーの存在を知らせるエラーメッセージを表示しない) ようにするか選択します。Amazon Cognito は、ユーザー名またはパスワードのいずれかが間違っているという一般的なメッセージで、存在しないユーザーのサインインリクエストに応答します。
-
(オプション) このアプリケーションクライアントに、[Attribute read and write permissions] (属性の読み取りと書き込みのアクセス許可) を構成します。アプリケーションクライアントは、ユーザープールの属性スキーマの限定サブセットに対して、読み取りと書き込みの許可が得られます。
-
[Create] を選択します。
-
[Client id] (クライアント ID) を書き留めます。これにより、サインアップリクエストとサインインリクエストでアプリケーションクライアントを識別します。
ユーザープールでアプリケーションクライアントを作成して更新する (API、AWS CLI)
次のいずれかを行ってください。