アプリケーションクライアントでのアプリケーション固有の設定 - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

アプリケーションクライアントでのアプリケーション固有の設定

ユーザープールアプリケーションクライアントは、Amazon Cognito で認証される 1 つのモバイルアプリケーションまたはウェブアプリケーションを操作するユーザープール内の設定です。アプリケーションクライアントは、認証されたオペレーションと認証されていないAPIオペレーションを呼び出し、ユーザーの属性の一部またはすべてを読み取ったり変更したりできます。アプリでは、登録、サインイン、パスワードを忘れた場合の処理を行う際に、アプリクライアントに対して自分自身を識別する必要があります。これらのAPIリクエストには、アプリケーションクライアント ID による自己識別と、オプションのクライアントシークレットによる承認が含まれている必要があります。承認されたクライアントアプリケーションのみがこれらの認証されていないオペレーションを呼び出すことができるように、アプリケーションクライアントIDsまたはシークレットを保護する必要があります。さらに、 AWS 認証情報を使用して認証されたAPIリクエストに署名するようにアプリを設定する場合は、認証情報をユーザー検査から保護する必要があります。

ユーザープールには複数のアプリを作成できます。アプリクライアントは、アプリのコードプラットフォームにリンクされている場合もあれば、ユーザープール内の別のテナントにリンクされている場合もあります。例えば、サーバー側アプリケーション用のアプリと、別の Android アプリを作成することができます。各アプリには独自のアプリのクライアント ID があります。

アプリケーションクライアントレベルで、次のユーザープール機能の設定を適用できます。

アプリクライアントの種類

Amazon Cognito でアプリケーションクライアントを作成すると、標準OAuthクライアントタイプパブリッククライアント機密クライアントに基づいてオプションを事前入力できます。クライアントシークレットを持つ機密クライアントを設定します。クライアントタイプの詳細については、IETF「6749 #2.1RFC」を参照してください。

パブリッククライアント

パブリッククライアントは、ブラウザまたはモバイルデバイスで実行されます。信頼できるサーバー側リソースがないため、クライアントシークレットはありません。

機密クライアント

機密クライアントには、認証されていないAPIオペレーションのクライアントシークレットで信頼できるサーバー側のリソースがあります。アプリケーションは、バックエンドサーバー上でデーモンまたはシェルスクリプトとして実行されることがあります。

クライアントシークレット

クライアントシークレットまたはクライアントパスワードは、アプリケーションクライアントへのすべてのAPIリクエストでアプリケーションが使用する必要がある固定文字列です。アプリクライアントには、アプリクライアントには、client_credentials 付与を実行するためのクライアントシークレットが必要です。詳細については、IETFRFC「6749 #2.3.1」を参照してください。

アプリを作成した後は、シークレットを変更できません。シークレットキーを更新したい場合、新規のシークレットで新しいアプリケーションを作成できます。また、そのアプリのクライアント ID を使用するアプリケーションからのアクセスを遮断するためにアプリケーションを削除できます。

パブリックアプリでは、機密クライアントとクライアントシークレットを使用できます。Amazon CloudFront プロキシを使用して、転送SECRET_HASH中の を追加します。詳細については、ブログの AWS 「Amazon プロキシを使用して Amazon Cognito のパブリッククライアントを保護する CloudFront 」を参照してください。

JSON ウェブトークン

Amazon Cognito アプリケーションクライアントは、次のタイプのJSONウェブトークン (JWTs) を発行できます。

アイデンティティ (ID) トークン

ユーザーがユーザープールから認証されていることを示す検証可能なステートメント。OpenID Connect (OIDC) は、2.0 で定義されているアクセストークンと更新トークンの標準に ID トークン仕様を追加しました。 OAuthID トークンには、アプリがユーザープロファイルの作成やリソースのプロビジョニングに使用できるユーザー属性などの ID 情報が含まれています。詳細については、「ID (ID) トークンについて」を参照してください。

アクセストークン

ユーザーのアクセス権を示す検証可能なステートメント。アクセストークンには、 および 2.0 の機能であるスコープ が含まれています。 OIDC OAuthアプリケーションは、バックエンドリソースにスコープを提示しAPI、ユーザープールがユーザーまたはマシンに のデータ、または独自のユーザーデータへのアクセスを許可したことを証明できます。カスタムスコープを持つアクセストークンは、多くの場合、M2M クライアント認証情報の付与により、リソースサーバーへのアクセスを許可します。詳細については、「アクセストークンについて」を参照してください。

更新トークン

ユーザーのトークンが有効期限切れになったときにアプリがユーザープールに提示できる、暗号化された初期認証ステートメント。更新トークンをリクエストすると、有効期限が切れていない新しいアクセストークンと ID トークンが返されます。詳細については、「更新トークンについて」を参照してください。

各アプリクライアントのこれらのトークンの有効期限は、Amazon Cognito コンソールでユーザープールの [アプリケーションの統合] タブから設定できます。

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

Amazon Cognito コンソールで、アプリクライアントに使用できる用語は次のとおりです。

許可されたコールバック URLs

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

  • 絶対的な にしてくださいURI。

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

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

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

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

URLs などのアプリケーションコールバックもサポートmyapp://exampleされています。

許可されたサインアウト URLs

サインアウトは、サインアウト後にユーザーをリダイレクトする場所URLを示します。

属性の読み取りおよび書き込み許可

ユーザープールには、それぞれに独自のアプリケーションクライアントと を持つ多数の顧客がいる場合があります IdPs。アプリに関連したユーザー属性のみの読み取りおよび書き込みアクセスを許可するようにアプリクライアントに設定できます。(M2M) 認証などの machine-to-machine場合は、どのユーザー属性にもアクセスを許可できません。

属性の読み取りおよび書き込みアクセス権限の設定に関する考慮事項
  • アプリケーションクライアントを作成し、属性の読み取りおよび書き込みアクセス許可をカスタマイズしない場合、Amazon Cognito はすべてのユーザープール属性に読み取りおよび書き込みアクセス許可を付与します。

  • イミュータブルなカスタム属性への書き込みアクセス権を付与できます。アプリケーションクライアントは、ユーザーを作成またはサインアップするときに、イミュータブル属性に値を書き込むことができます。その後は、ユーザーのイミュータブルなカスタム属性に値を書き込むことはできません。

  • アプリクライアントは、ユーザープール内の必須属性への書き込み権限を持っている必要があります。Amazon Cognito コンソールは、必須の属性を自動的に書き込み可能に設定します。

  • アプリケーションクライアントに対して、email_verified または phone_number_verified への書き込みアクセス権限を付与することはできません。ユーザープール管理者は、これらの値を変更できます。ユーザーは、これらの属性の値を属性の検証でのみ変更できます。

認証フロー

アプリクライアントが許可するサインイン方法。アプリは、ユーザー名とパスワードによる認証、セキュアリモートパスワード (SRP)、Lambda トリガーによるカスタム認証、トークンの更新をサポートできます。セキュリティのベストプラクティスとして、プライマリサインイン方法としてSRP認証を使用します。ホストされた UI は、 でユーザーに自動的にサインインしますSRP。

カスタムスコープ

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

デフォルトのリダイレクト URI

サードパーティーの を持つユーザーの認証リクエストの redirect_uriパラメータを置き換えます IdPs。CreateUserPoolClient または UpdateUserPoolClientAPIリクエストの DefaultRedirectURIパラメータを使用して、このアプリケーションクライアント設定を設定します。これは、CallbackURLsアプリケーションクライアントの のメンバーでもあるURL必要があります。Amazon Cognito は、次のURL場合に、認証されたセッションをこれにリダイレクトします。

  1. アプリケーションクライアントには、1 つの ID プロバイダーが割り当てられ、複数のコールバックURLsが定義されています。ユーザープールは、認証リクエストにredirect_uriパラメータが含まれURIていない場合、認証サーバーをデフォルトのリダイレクトにリダイレクトします。

  2. アプリケーションクライアントには、1 つの ID プロバイダーが割り当てられ、1 つのコールバックURLsが定義されています。このシナリオでは、デフォルトのコールバック を定義する必要はありませんURL。redirect_uri パラメータを含まないリクエストは、使用可能なコールバック にリダイレクトされますURL。

ID プロバイダ

ユーザープールの外部 ID プロバイダー (IdPs) の一部またはすべてを選択して、ユーザーを認証できます。アプリクライアントは、ユーザープール内のローカルユーザーのみを認証することもできます。IdP をアプリクライアントに追加すると、IdP への認可リンクを生成して、ホストされた UI サインインページで表示できます。複数の を割り当てることはできますが IdPs、少なくとも 1 つを割り当てる必要があります。外部 の使用の詳細については IdPs、「」を参照してくださいサードパーティー経由のユーザープールへのサインインの追加

OpenID Connect のスコープ

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

  • openid スコープでは、ID トークンとユーザーの固有 ID を取得することを宣言します。また、リクエストに含まれる追加のスコープに応じて、すべてまたは一部のユーザー属性もリクエストします。openid スコープをリクエストしない限り、Amazon Cognito は ID トークンを返しません。openid スコープは、有効期限やキー ID などの構造的な ID トークンのクレームを承認し、userInfo エンドポイント からのレスポンスで受け取るユーザー属性を決定します。

    • リクエストするスコープが openid のみである場合、Amazon Cognito は現在のアプリケーションクライアントが読み取ることができるすべてのユーザー属性を ID トークンに入力します。このスコープだけを使用したアクセストークンへの userInfo レスポンスにより、すべてのユーザー属性が返されます。

    • phoneemailprofile などの他のスコープで openid をリクエストすると、ID トークンと userInfo はユーザー固有の ID と追加のスコープで定義された属性を返します。

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

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

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

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

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

OAuth 許可タイプ

OAuth グラントは、ユーザープールトークンを取得する認証方法です。Amazon Cognito は、以下の付与タイプをサポートしています。これらのOAuth権限をアプリに統合するには、ユーザープールにドメインを追加する必要があります。

認可コード付与

認可コード付与は、アプリがトークンエンドポイントを使用してユーザープールのトークンと交換できるコードを生成します。認可コードを交換すると、アプリは ID、アクセス、更新の各トークンを受け取ります。このOAuthフローは、暗黙的な許可と同様に、ユーザーのブラウザで発生します。認可コード付与は、トークンがユーザーのセッションで表示されないため、Amazon Cognito が提供する最も安全な付与です。代わりに、アプリはトークンを返すリクエストを生成し、保護されたストレージにトークンをキャッシュできます。詳細については、「6749 #1.3.1」の「認証コード」を参照してください。 IETF RFC

注記

パブリッククライアントアプリケーションのベストプラクティスとして、認証コード許可OAuthフローのみをアクティブ化し、コード交換用の検証キー (PKCE) を実装してトークン交換を制限します。を使用するとPKCE、クライアントは、トークンエンドポイントに元の認証リクエストで提示されたのと同じシークレットを提供した場合にのみ、認証コードを交換できます。の詳細についてはPKCE、IETF「7636RFC」を参照してください。

暗黙的な付与

暗黙的な付与は、認可エンドポイント からアクセストークンと ID トークンをユーザのブラウザセッションに直接配信します (更新トークンは配信しません)。暗黙的な許可は、トークンエンドポイントへの個別のリクエストの要件を削除しますが、 PKCEと互換性がなく、更新トークンを返しません。この付与は、認可コード付与を完了できないテストシナリオやアプリアーキテクチャに対応できます。詳細については、IETF「6749 #1.3.2RFC」の「暗黙的な許可」を参照してください。認可コード付与と暗黙的な付与の両方をアプリクライアントで有効にして、必要に応じて使い分けることができます。

クライアント認証情報の付与

クライアント認証情報の付与は (M2M) 通信用 machine-to-machineです。認可コード付与と暗黙的な付与は、認証された人間のユーザーにトークンを発行します。クライアント認証情報は、非インタラクティブシステムから にスコープベースの承認を付与しますAPI。アプリは、トークンエンドポイントに対してクライアント認証情報を直接リクエストし、アクセストークンを受け取ることができます。詳細については、IETF「6749 #1.3.4RFC」の「クライアント認証情報」を参照してください。クライアント認証情報の付与は、クライアントシークレットを持ち、認可コード付与や暗黙的な付与をサポートしていないアプリクライアントでのみ有効化できます。

注記

ユーザーとしてクライアント認証情報フローを呼び出すことはないため、このフローでアクセストークンに追加できるのはカスタムスコープのみです。カスタムスコープは、各自のリソースサーバー用に定義したものです。openidprofile などのデフォルトのスコープは、人間以外のユーザーには適用されません。

ID トークンはユーザー属性の検証であるため、M2M 通信には関係なく、クライアント認証情報の付与では ID トークンを発行しません。「スコープ、M2M 、および APIs リソースサーバー」を参照してください。

クライアント認証情報は、 AWS 請求書にコストを追加します。詳細については、「Amazon Cognito の料金」を参照してください。

アプリクライアントの作成

AWS Management 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] (その他)。

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

  8. [クライアントシークレットを生成] を選択して、Amazon Cognito でクライアントシークレットを自動生成します。クライアントシークレットは通常、機密クライアントに関連付けられます。

  9. アプリケーションクライアントで許可したい [Authentication flows] (認証のフロー) を選択します。

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

  11. (オプション) トークンの有効期限を設定する場合は、以下の手順を実行します。

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

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

  13. このアプリクライアントに対して、[ユーザー存在エラーを防ぐ] かどうかを選択します。Amazon Cognito は、ユーザー名またはパスワードのいずれかが間違っているという一般的なメッセージで、存在しないユーザーのサインインリクエストに応答します。

  14. ホストされた UI をこのアプリクライアントで使用する場合は、[ホストされた UI 設定] を設定します。

    1. 1 つ以上の許可されたコールバック URLsを入力します。これらは、Amazon Cognito URLsが認証を完了した後にユーザーをリダイレクトするウェブまたはアプリです。

    2. 1 つ以上の許可されたサインアウト URLsを入力します。これらはURLs、 へのリクエストでアプリが受け入れるものですログアウトエンドポイント

    3. アプリにユーザーをサインインできるようにする ID プロバイダーを 1 つ以上選択します。既存の の任意の組み合わせを選択できます IdPs。ユーザープールだけで、またはユーザープールで IdPs 設定した 1 つ以上のサードパーティーでユーザーを認証できます。

    4. アプリケーションクライアントが受け入れる OAuth 2.0 許可タイプを選択します。

      • 認証コード許可を選択して、 でトークンと引き換えることができるコードをアプリに渡すことができますトークンエンドポイント

      • ID トークンとアクセストークンをアプリに直接渡すには、[暗黙的な付与] を選択します。暗黙的な付与フローは、トークンをユーザーに直接公開します。

      • ユーザー認証情報ではなく、クライアントシークレットの知識に基づいてアプリにアクセストークンを渡すには、[クライアント認証情報] を選択します。クライアント認証情報の付与フローは、認可コード付与フローや暗黙的な付与フローと相互に排他的です。

    5. このアプリクライアントでの使用を認可する [OpenID Connect スコープ] を選択します。ユーザープール を通じてaws.cognito.signin.user.admin、スコープ のみを使用してアクセストークンを生成できますAPI。その他のスコープについては、トークンエンドポイント にアクセストークンをリクエストする必要があります。

    6. アプリクライアントで認可するカスタムスコープを選択します。カスタムスコープは、サードパーティーの へのアクセスを許可するために最も頻繁に使用されますAPIs。

  15. このアプリクライアントに、属性の読み取りおよび書き込み許可を設定します。アプリクライアントは、ユーザープールの属性スキーマのすべて、または限定されたサブセットの読み取りと書き込みのアクセス許可を持つことができます。

  16. [Create app client] を選択します。

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

AWS CLI
aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp
注記

コールバックとログアウトのJSON形式を使用してURLs、 CLIがそれらをリモートパラメータファイルとして処理しないようにします。

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

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

Amazon Cognito user pools API

CreateUserPoolClient API リクエストを生成します。デフォルト値に設定しないすべてのパラメータには、値を指定する必要があります。

ユーザープールアプリケーションクライアントの更新 (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-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