翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ユーザープールアプリケーションクライアントは、Amazon Cognito で認証される 1 つのモバイルアプリケーションまたはウェブアプリケーションを操作するユーザープール内の設定です。アプリケーションクライアントは、認証済みおよび未認証の API オペレーションを呼び出したり、ユーザーの属性の一部またはすべてを読み取ったり変更したりできます。アプリでは、登録、サインイン、パスワードを忘れた場合の処理を行う際に、アプリクライアントに対して自分自身を識別する必要があります。これらの API リクエストには、アプリクライアント ID による自己識別と、オプションのクライアントシークレットによる認可が含まれていなければなりません。認証されたクライアントアプリのみがこれらの認証されていない API を呼び出すことができるように、アプリクライアント ID またはシークレットをセキュア化する必要があります。さらに、認証された API リクエストに AWS 認証情報で署名するようにアプリを設定する場合は、ユーザー検査から認証情報を保護する必要があります。
ユーザープールには複数のアプリを作成できます。アプリクライアントは、アプリのコードプラットフォームにリンクされている場合もあれば、ユーザープール内の別のテナントにリンクされている場合もあります。例えば、サーバー側アプリケーション用のアプリと、別の Android アプリを作成することができます。各アプリには独自のアプリのクライアント ID があります。
アプリケーションクライアントレベルで、次のユーザープール機能の設定を適用できます。
-
マネージドログイン IdPs、許可タイプ、コールバック URLs、カスタマイズ
アプリクライアントの種類
Amazon Cognito でアプリクライアントを作成する際、標準の OAuth クライアントタイプであるパブリッククライアントと機密クライアントに基づいたオプションを事前に入力できます。クライアントシークレットを持つ機密クライアントを設定します。クライアントの種類の詳細については、IETF RFC 6749 #2.1
- パブリッククライアント
-
パブリッククライアントは、ブラウザまたはモバイルデバイスで実行されます。信頼できるサーバー側リソースがないため、クライアントシークレットはありません。
- 機密クライアント
-
機密クライアントには、認証されていない API オペレーションのクライアントシークレットで信頼できるサーバー側のリソースがあります。アプリケーションは、バックエンドサーバー上でデーモンまたはシェルスクリプトとして実行されることがあります。
- クライアントシークレット
-
クライアントシークレットまたはクライアントパスワードは、アプリクライアントへのすべての API リクエストでアプリが使用する必要がある固定文字列です。アプリクライアントには、アプリクライアントには、
client_credentials
付与を実行するためのクライアントシークレットが必要です。詳細については、IETF RFC 6749 #2.3.1を参照してください。 アプリを作成した後は、シークレットを変更できません。シークレットキーを更新したい場合、新規のシークレットで新しいアプリケーションを作成できます。また、そのアプリのクライアント ID を使用するアプリケーションからのアクセスを遮断するためにアプリケーションを削除できます。
注記
Amazon Cognito コンソールは、アプリケーションタイプの従来のウェブアプリケーションとMachine-to-machineアプリケーションオプションを選択すると、クライアントシークレットを持つアプリケーションクライアントを作成します。これらのオプションのいずれかを選択してクライアントシークレットを生成するか、CreateUserPoolClient を使用してプログラムでクライアントを作成し、
GenerateSecret
を に設定しますtrue
。
パブリックアプリでは、機密クライアントとクライアントシークレットを使用できます。Amazon CloudFront プロキシを使用して、転送中の SECRET_HASH
を追加します。詳細については、 AWS
ブログの「Amazon CloudFront プロキシを使用して Amazon Cognito のパブリッククライアントを保護する
JSON ウェブトークン
Amazon Cognito アプリクライアントは、以下のタイプの JSON ウェブトークン (JWT) を発行できます。
- アイデンティティ (ID) トークン
-
ユーザーがユーザープールから認証されていることを示す検証可能なステートメント。OpenID Connect (OIDC) は、OAuth 2.0 で定義されているアクセストークンとリフレッシュトークンの標準に ID トークンの仕様
を追加しました。ID トークンには、アプリがユーザープロファイルの作成やリソースのプロビジョニングに使用できるユーザー属性などの ID 情報が含まれています。詳細については「ID トークンの理解」を参照してください。 - アクセストークン
-
ユーザーのアクセス権を示す検証可能なステートメント。アクセストークンには、OIDC と OAuth 2.0 の機能であるスコープ
が含まれています。アプリは、バックエンドリソースにスコープを提示することで、ユーザープールが API のデータや独自のユーザーデータへのアクセスをユーザーまたはマシンに許可していることを証明できます。カスタムスコープを持つアクセストークンは、多くの場合、M2M クライアント認証情報の付与により、リソースサーバーへのアクセスを許可します。詳細については「アクセストークンの理解」を参照してください。 - 更新トークン
-
ユーザーのトークンが有効期限切れになったときにアプリがユーザープールに提示できる、暗号化された初期認証ステートメント。更新トークンをリクエストすると、有効期限が切れていない新しいアクセストークンと ID トークンが返されます。詳細については「更新トークンの理解」を参照してください。
Amazon Cognito コンソール
アプリクライアントの用語
Amazon Cognito コンソールで、アプリクライアントに使用できる用語は次のとおりです。
- 許可されているコールバック URL
-
コールバック URL は、ユーザーがサインインに成功したときにリダイレクトされる先を指定します。少なくとも 1 つのコールバック URL を選択してください。コールバック URL は、以下が必要です。
-
絶対 URI である。
-
クライアントに事前登録されている。
-
フラグメントコンポーネントを含まない。
「OAuth 2.0 - リダイレクトエンドポイント
」を参照してください。 Amazon Cognito は、テスト目的限定の
HTTPS
を除き、HTTP
ではなくhttp://localhost
を使用します。また、アプリのコールバック URL (例:
myapp://example
) もサポートされています。 -
- 許可されているサインアウト URL
-
サインアウト URL は、ユーザーがサインアウトしたときにリダイレクトされる先を指定します。
- 属性の読み取りおよび書き込み許可
-
ユーザープールには多数の顧客がいて、それぞれが独自のアプリクライアントと IdP を使用している場合があります。アプリに関連したユーザー属性のみの読み取りおよび書き込みアクセスを許可するようにアプリクライアントに設定できます。マシンツーマシン (M2M) 認可のように、すべてのユーザー属性へのアクセスを禁止することもできます。
属性の読み取りおよび書き込みアクセス権限の設定に関する考慮事項
-
アプリケーションクライアントを作成する場合で、属性の読み取り/書き込みアクセス許可をカスタマイズしない場合、Amazon Cognito はすべてのユーザープール属性に読み取り/書き込みアクセス許可を付与します。
-
イミュータブルなカスタム属性への書き込みアクセス権を付与できます。ユーザーの作成時またはサインアップ時に、アプリケーションクライアントはイミュータブルな属性に値を書き込むことができます。その後は、ユーザーのイミュータブルなカスタム属性に値を書き込むことはできません。
-
アプリクライアントは、ユーザープール内の必須属性への書き込み権限を持っている必要があります。Amazon Cognito コンソールは、必須の属性を自動的に書き込み可能に設定します。
-
アプリケーションクライアントに対して、
email_verified
またはphone_number_verified
への書き込みアクセス権限を付与することはできません。ユーザープール管理者は、これらの値を変更できます。ユーザーは、これらの属性の値を属性の検証でのみ変更できます。
-
- 認証フロー
-
アプリクライアントが許可するサインイン方法。アプリは、ユーザー名とパスワードによる認証、E メールおよび SMS メッセージ OTPs、パスキー認証、Lambda トリガーによるカスタム認証、トークンの更新をサポートできます。セキュリティのベストプラクティスとして、カスタムビルドアプリケーションでユーザー名とパスワード認証に SRP 認証を使用します。
- カスタムスコープ
-
カスタムスコープは、[リソースサーバー] で各自のリソースサーバー用に定義したものです。形式は
resource-server-identifier
/scope
です。「リソースサーバーを使用したスコープ、M2M、および API」を参照してください。 - デフォルトのリダイレクト URI
-
サードパーティー IdP を持つユーザーの認証リクエストの
redirect_uri
パラメータを置き換えます。CreateUserPoolClient API リクエストまたは UpdateUserPoolClient API リクエストのDefaultRedirectURI
パラメータを使用して、このアプリケーションクライアント設定をセットアップします。また、この URL は、アプリケーションクライアント用のCallbackURLs
のメンバーである必要もあります。Amazon Cognito は、次の場合に、認証されたセッションをこの URL にリダイレクトします。-
アプリケーションクライアントには、1 つの ID プロバイダーが割り当てられ、複数のコールバック URL が定義されています。ユーザープールは、認証リクエストに
redirect_uri
パラメータが含まれていない場合、認可サーバーへの認証リクエストをデフォルトのリダイレクト URI にリダイレクトします。 -
アプリケーションクライアントには、1 つの ID プロバイダーが割り当てられ、1 つのコールバック URL が定義されています。このシナリオでは、デフォルトのコールバック URL を定義する必要はありません。
redirect_uri
パラメータを含まないリクエストは、使用可能なコールバック URL の 1 つにリダイレクトされます。
-
- ID プロバイダ
-
ユーザープールの外部 ID プロバイダー (IdP) の一部またはすべてを選択して、ユーザーを認証できます。アプリクライアントは、ユーザープール内のローカルユーザーのみを認証することもできます。IdP をアプリケーションクライアントに追加すると、IdP への認可リンクを生成し、マネージドログインサインインページに表示できます。複数の IdP を割り当てることができ、少なくとも 1 つを割り当てる必要があります。外部 IdP の使用の詳細については、「サードパーティーの ID プロバイダーによるユーザープールのサインイン」を参照してください。
- OpenID Connect のスコープ
-
次の
OAuth
スコープを 1 つ以上選択し、アクセストークン用にリクエストできるアクセス権限を指定します。-
openid
スコープでは、ID トークンとユーザーの固有 ID を取得することを宣言します。また、リクエストに含まれる追加のスコープに応じて、すべてまたは一部のユーザー属性もリクエストします。openid
スコープをリクエストしない限り、Amazon Cognito は ID トークンを返しません。openid
スコープは、有効期限やキー ID などの構造的な ID トークンのクレームを承認し、userInfo エンドポイント からのレスポンスで受け取るユーザー属性を決定します。-
リクエストするスコープが
openid
のみである場合、Amazon Cognito は現在のアプリケーションクライアントが読み取ることができるすべてのユーザー属性を ID トークンに入力します。このスコープだけを使用したアクセストークンへのuserInfo
レスポンスにより、すべてのユーザー属性が返されます。 -
phone
、email
、profile
などの他のスコープでopenid
をリクエストすると、ID トークンとuserInfo
はユーザー固有の ID と追加のスコープで定義された属性を返します。
-
-
phone
スコープはphone_number
クレームおよびphone_number_verified
クレームへのアクセスを付与します。このスコープはopenid
スコープを使用する場合にのみリクエストできます。 -
email
スコープはemail
クレームおよびemail_verified
クレームへのアクセスを付与します。このスコープはopenid
スコープを使用する場合にのみリクエストできます。 -
aws.cognito.signin.user.admin
スコープは、UpdateUserAttributes や VerifyUserAttribute など、アクセストークンを必要とする Amazon Cognito ユーザープール API オペレーションへのアクセスを許可します。 -
profile
スコープはクライアントが読み取り可能なすべてのユーザー属性へのアクセスを付与します。このスコープはopenid
スコープを使用する場合にのみリクエストできます。
スコープの詳細については、標準 OIDC スコープ
のリストを参照してください。 -
- OAuth 付与タイプ
-
OAuth 付与は、ユーザープールのトークンを取得する認証方法です。Amazon Cognito は、以下の付与タイプをサポートしています。これらの OAuth 付与をアプリに統合するには、ユーザープールにドメインを追加する必要があります。
認可コード付与
認可コード付与は、アプリがトークンエンドポイントを使用してユーザープールのトークンと交換できるコードを生成します。認可コードを交換すると、アプリは ID、アクセス、更新の各トークンを受け取ります。この OAuth フローは、暗黙的な付与と同様に、ユーザーのブラウザで発生します。認可コード付与は、トークンがユーザーのセッションで表示されないため、Amazon Cognito が提供する最も安全な付与です。代わりに、アプリはトークンを返すリクエストを生成し、保護されたストレージにトークンをキャッシュできます。詳細については、「IETF RFC 6749 #1.3.1
」の「Authorization Code」を参照してください。 注記
パブリッククライアントアプリにおけるセキュリティのベストプラクティスとして、認可コード付与の OAuth フローのみを有効にし、Proof Key for Code Exchange (PKCE) を実装してトークン交換を制限します。PKCE では、クライアントは、元の認証リクエストで提示したのと同じシークレットをトークンエンドポイントに提供した場合にのみ、認可コードを交換できます。PKCE の詳細については、IETF RFC 7636
を参照してください。 暗黙的な付与
暗黙的な付与は、認可エンドポイント からアクセストークンと ID トークンをユーザのブラウザセッションに直接配信します (更新トークンは配信しません)。暗黙的な付与では、トークンエンドポイントへの個別のリクエストは不要になりますが、PKCE とは互換性がなく、更新トークンは返されません。この付与は、認可コード付与を完了できないテストシナリオやアプリアーキテクチャに対応できます。詳細については、IETF RFC 6749 #1.3.2
の「暗黙的な付与」を参照してください。認可コード付与と暗黙的な付与の両方をアプリクライアントで有効にして、必要に応じて使い分けることができます。 クライアント認証情報の付与
クライアント認証情報の付与は、マシンツーマシン (M2M) の通信に使用します。認可コード付与と暗黙的な付与は、認証された人間のユーザーにトークンを発行します。クライアント認証情報の付与は、非対話型システムから API にスコープベースの認可を付与します。アプリは、トークンエンドポイントに対してクライアント認証情報を直接リクエストし、アクセストークンを受け取ることができます。詳細については、IETF RFC 6749 #1.3.4
の「クライアント認証情報」を参照してください。クライアント認証情報の付与は、クライアントシークレットを持ち、認可コード付与や暗黙的な付与をサポートしていないアプリクライアントでのみ有効化できます。 注記
ユーザーとしてクライアント認証情報フローを呼び出すことはないため、このフローでアクセストークンに追加できるのはカスタムスコープのみです。カスタムスコープは、各自のリソースサーバー用に定義したものです。
openid
やprofile
などのデフォルトのスコープは、人間以外のユーザーには適用されません。ID トークンはユーザー属性の検証であるため、M2M 通信には関係なく、クライアント認証情報の付与では ID トークンを発行しません。「リソースサーバーを使用したスコープ、M2M、および API」を参照してください。
クライアント認証情報の付与により、 AWS 請求書にコストがかかります。詳細については、「Amazon Cognito の料金
」を参照してください。
アプリクライアントの作成
アプリクライアントを作成する (コンソール)
-
Amazon Cognito コンソール
に移動します。プロンプトが表示されたら、 AWS 認証情報を入力します。 -
[User Pools] (ユーザープール) を選択します。
-
リストから既存のユーザープールを選択、またはユーザープールを作成します。どちらのオプションでも、アプリケーション固有の設定でアプリケーションクライアントを設定するように求められます。
-
アプリケーションアーキテクチャを反映するアプリケーションタイプを選択します。
-
わかりやすい識別子を使用してアプリケーションに名前を付けます。
-
戻り URL を入力します。
-
[Create app client] を選択します。アプリケーションクライアントを作成した後、詳細オプションを変更できます。
-
Amazon Cognito は、アプリケーションクライアントの詳細を返します。アプリケーションのサンプルコードにアクセスするには、クイックセットアップガイドタブからプラットフォームを選択します。
ユーザープールアプリケーションクライアント (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 describe-user-pool-client --user-pool-id
MyUserPoolID
--client-idMyClientID
詳細については、 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