ユーザープール内のユーザーデバイスの使用 - Amazon Cognito

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

ユーザープール内のユーザーデバイスの使用

Amazon Cognito ユーザープール でローカルユーザープールユーザーをサインインするとAPI、高度なセキュリティ機能からのユーザーのアクティビティログを各デバイスに関連付けることができ、オプションで、信頼できるデバイス上にある場合は多要素認証 (MFA) をスキップできます。Amazon Cognito には、デバイス情報がまだ含まれていないサインインへのレスポンスにデバイスキーが含まれます。デバイスキーの形式は Region_UUID です。デバイスキー、Secure Remote Password (SRP) ライブラリ、およびデバイス認証を許可するユーザープールを使用すると、アプリ内のユーザーに現在のデバイスを信頼するように促し、サインイン時にMFAコードの入力を求めなくなります。

記憶済みデバイスのセットアップ

Amazon Cognito ユーザープールでは、ユーザーの各デバイスを固有のデバイス識別子、つまりデバイスキーに関連付けることができます。サインイン時にデバイスキーを提示してデバイス認証を行うと、2 つの機能を利用できます。

  1. 高度なセキュリティ機能により、セキュリティと分析を目的として、特定のデバイスでのユーザーアクティビティをモニタリングできます。ユーザーがログインすると、アプリでは、オプションで各ユーザーとそのデバイスを認証して、アクティビティログにデバイス情報を追加することができます。

  2. デバイスを覚えておくと、信頼できるデバイス認証フローもサポートされます。このフローでは、ユーザーはアプリのセキュリティ要件に適した期間MFA、 なしでサインインすることを選択できます。ユーザーがMFAコードを送信するように再プロンプトする場合は、デバイスの記憶済みステータスを変更できます。

    記憶されているデバイスは、MFAアクティブなユーザープールMFAでのみオーバーライドできます。

ユーザーが記憶されているデバイスでログインする場合、認証フロー中に追加のデバイス認証を実行する必要があります。詳細については、「デバイスでのサインイン」を参照してください。

ユーザープールの [サインインエクスペリエンス] タブの [デバイスの追跡] で、ユーザープールがデバイスを記憶するように設定します。Amazon Cognito コンソールを使用して記憶済みデバイス機能をセットアップするときは、[常に][User Opt-In] (ユーザーオプトイン)、および [いいえ] の 3 つのオプションがあります。

記憶しない

ユーザープールでは、ログイン時にデバイスを記憶するように求めるメッセージは表示されません。

常に記憶する

アプリがユーザーのデバイスを確認すると、ユーザープールは常にデバイスを記憶し、今後のデバイスサインインの成功時にMFAチャレンジを返しません。

ユーザーオプトイン

アプリがユーザーのデバイスを確認すると、ユーザープールはMFAチャレンジを自動的に抑制しません。デバイスを記憶するかどうかをユーザーが選択するようにユーザーに求める必要があります。

[常に記憶する] または [ユーザーオプトイン] を選択すると、ユーザーが未確認のデバイスからサインインするたびに、Amazon Cognito はデバイス ID キーとシークレットを生成します。デバイスキーは、ユーザーがデバイス認証を実行したときにアプリがユーザープールに送信する最初の識別子です。

確認済みの各ユーザーデバイスでは、自動的に記憶されるかオプトインされたかに関係なく、ユーザーがサインインするたびにデバイス識別子キーとシークレットを使用してデバイスを認証できます。

CreateUserPool または UpdateUserPoolAPIリクエストでユーザープールの記憶済みデバイス設定を構成することもできます。詳細については、 DeviceConfigurationプロパティを参照してください。

Amazon Cognito ユーザープールAPIには、記憶されたデバイスに対する追加のオペレーションがあります。

  1. ListDevices および は、ユーザーのデバイスキーとそのメタダのリストAdminListDevicesを返します。

  2. GetDevice と は、単一のデバイスのデバイスキーとメタデータAdminGetDeviceを返します。

  3. UpdateDeviceStatus ユーザーのデバイスを記憶済みまたは記憶されていないものとしてAdminUpdateDeviceStatus設定します。

  4. ForgetDevice および は、プロファイルからユーザーの確認済みデバイスAdminForgetDeviceを削除します。

API で始まる名前の オペレーションAdminは、サーバー側のアプリケーションで使用するためのもので、IAM認証情報で認証される必要があります。詳細については、「Amazon Cognito ユーザープール API とユーザープールのエンドポイントの使用」を参照してください。

デバイスキーの取得

ユーザーがユーザープールでサインインAPIし、認証パラメータにデバイスキーを として含めない場合DEVICE_KEY、Amazon Cognito はレスポンスに新しいデバイスキーを返します。クライアント側パブリックアプリでは、デバイスキーをアプリストレージに配置することで、今後のリクエストに含められるようになります。機密のサーバー側アプリで、ブラウザー Cookie または別のクライアント側トークンをユーザーのデバイスキーで設定します。

ユーザーが信頼できるデバイスを使用してサインインする前に、アプリはデバイスキーを確認して追加情報を提供する必要があります。Amazon Cognito にConfirmDeviceリクエストを生成し、デバイスキー、フレンドリ名、パスワード検証子、ソルトを使用してユーザーのデバイスを確認します。ユーザープールでオプトインデバイス認証を設定した場合、Amazon Cognito は ConfirmDevice リクエストに、ユーザーは現在のデバイスを記憶するかどうかを選択する必要があるプロンプトで応答する必要があります。UpdateDeviceStatus リクエストでユーザーの選択に応答します。

ユーザーのデバイスを確認したが、記憶されるように設定しなかった場合、Amazon Cognito は関連付けを保存しますが、デバイスキーを入力するとデバイス以外のサインインで続行します。デバイスは、ユーザーのセキュリティとトラブルシューティングに役立つログを生成できます。確認済みで記憶されていないデバイスは、サインイン機能を利用しませんが、セキュリティモニタリングログ機能は利用します。アプリクライアントの高度なセキュリティ機能を有効にし、デバイスのフットプリントをリクエストにエンコードすると、Amazon Cognito はユーザーイベントを確認済みのデバイスに関連付けます。

新しいデバイスキーを取得するには
  1. InitiateAuth API リクエストを使用してユーザーのサインインセッションを開始します。

  2. ユーザーのサインインセッションが完了したことを示すJSONウェブトークン (JWTs) を受信するRespondToAuthChallengeまで、 ですべての認証チャレンジに応答します。

  3. アプリで、Amazon Cognito がその RespondToAuthChallenge または InitiateAuth レスポンスの NewDeviceMetadata に返す値 (DeviceGroupKey および DeviceKey) を記録します。

  4. ソルトとパスワードの検証子という新しいSRPシークレットをユーザーに生成します。この関数は、SRPライブラリSDKsを提供する で使用できます。

  5. ユーザーにデバイス名の入力を求めるか、ユーザーのデバイス特性からデバイス名を生成します。

  6. ユーザーのアクセストークン、デバイスキー、デバイス名、シーSRPクレットをConfirmDeviceAPIリクエストに入力します。ユーザープールがデバイスを [常に記憶する] に設定されていれば、ユーザー登録は完了です。

  7. Amazon Cognito が "UserConfirmationNecessary": trueConfirmDevice に応答した場合は、デバイスを記憶するかどうかを選択するようユーザーに促します。ユーザーがデバイスを記憶したいことを確認した場合は、ユーザーのアクセストークン、デバイスキー、および を使用して UpdateDeviceStatusAPIリクエストを生成します"DeviceRememberedStatus": "remembered"

  8. Amazon Cognito にデバイスを記憶するように指示した場合、次回サインインするときにMFAチャレンジではなくチャレンジが表示されますDEVICE_SRP_AUTH

デバイスでのサインイン

ユーザーのデバイスを記憶するように設定すると、Amazon Cognito は同じデバイスキーでサインインするときにMFAコードを送信する必要がなくなります。デバイス認証は、 MFA認証チャレンジをデバイス認証チャレンジに置き換えるだけです。グループとしてサインインすることはできません。ユーザーはまずパスワードまたはカスタムチャレンジを使用して認証を完了する必要があります。記憶しているデバイスでのユーザーの認証プロセスは次のとおりです。

カスタム認証チャレンジ Lambda トリガー を使用するフローでデバイス認証を実行するにはInitiateAuthAPIリクエストで DEVICE_KEYパラメータを渡します。ユーザーがすべてのチャレンジに成功し、CUSTOM_CHALLENGE チャレンジが trueissueTokens 値を返すと、Amazon Cognito は最後の 1 つの DEVICE_SRP_AUTH チャレンジを返します。

デバイスでのサインインするには
  1. ユーザーのデバイスキーをクライアントストレージから取得します。

  2. InitiateAuth API リクエストを使用してユーザーのサインインセッションを開始します。USER_SRP_AUTHREFRESH_TOKEN_AUTHUSER_PASSWORD_AUTH、または CUSTOM_AUTHAuthFlow を選択します。AuthParameters で、ユーザーのデバイスキーを DEVICE_KEY パラメータに追加し、選択したログインフローに必要なその他のパラメータを含めます。

    1. 認証チャレンジへの PASSWORD_VERIFIER レスポンスのパラメータで DEVICE_KEY を渡すこともできます。

  3. レスポンスに DEVICE_SRP_AUTH チャレンジを受け取るまで、チャレンジレスポンスを完了します。

  4. RespondToAuthChallenge API リクエストで、、、DEVICE_SRP_AUTHおよび ChallengeNameの および パラメータの USERNAMEを送信しますDEVICE_KEYSRP_A

  5. Amazon Cognito は DEVICE_PASSWORD_VERIFIER チャレンジで応答します。このチャレンジレスポンスには、SECRET_BLOCK および SRP_B の値が含まれます。

  6. SRP ライブラリで、、PASSWORD_CLAIM_SIGNATURE、、TIMESTAMP、および PASSWORD_CLAIM_SECRET_BLOCKDEVICE_KEYパラメータを生成USERNAMEして送信します。これらは追加の RespondToAuthChallenge リクエストで送信してください。

  7. ユーザーの を受け取るまで、追加のチャレンジを完了しますJWTs。

次の擬似コードは、DEVICE_PASSWORD_VERIFIER チャレンジレスポンスの値を計算する方法を示しています。

PASSWORD_CLAIM_SECRET_BLOCK = SECRET_BLOCK TIMESTAMP = Tue Sep 25 00:09:40 UTC 2018 PASSWORD_CLAIM_SIGNATURE = Base64(SHA256_HMAC(K_USER, DeviceGroupKey + DeviceKey + PASSWORD_CLAIM_SECRET_BLOCK + TIMESTAMP)) K_USER = SHA256_HASH(S_USER) S_USER = (SRP_B - k * gx)(a + ux) x = SHA256_HASH(salt + FULL_PASSWORD) u = SHA256_HASH(SRP_A + SRP_B) k = SHA256_HASH(N + g)

デバイスの表示、更新、削除

Amazon Cognito を使用して、アプリに次の機能を実装できますAPI。

  1. ユーザーの現在のデバイスに関する情報を表示します。

  2. ユーザーのすべてのデバイスのリストを表示します。

  3. デバイスの「記憶済み」状態を解除する

  4. デバイスの記憶状態を更新します。

以下の説明のAPIリクエストを承認するアクセストークンには、 aws.cognito.signin.user.adminスコープが含まれている必要があります。Amazon Cognito は、Amazon Cognito ユーザープール で生成するすべてのアクセストークンに、このスコープのクレームを追加しますAPI。サードパーティー IdPs は、Amazon Cognito MFAに認証するユーザーのデバイスと を個別に管理する必要があります。ホストされた UI では aws.cognito.signin.user.admin スコープをリクエストできますが、ホストされた UI はデバイス情報を高度なセキュリティのユーザーログに自動的に追加するので、デバイスの記憶は提供しません。

デバイスに関する情報を表示する

ユーザーのデバイスに関する情報をクエリして、そのデバイスが現在も使用されているかどうかを判断できます。例えば、記憶されているデバイスが 90 日間サインインしていない場合に、そのデバイスを非アクティブ化することができます。

  • ユーザーのデバイス情報をパブリッククライアントアプリに表示するには、ユーザーのアクセスキーとデバイスキーをGetDeviceAPIリクエストで送信します。

  • 機密クライアントアプリにユーザーのデバイス情報を表示するには、 AWS 認証情報を使用して AdminGetDevice API リクエストに署名し、ユーザーのユーザー名、デバイスキー、およびユーザープールを送信します。

ユーザーのすべてのデバイスのリストを表示する

ユーザーのすべてのデバイスとそのプロパティのリストを表示できます。例えば、現在のデバイスが記憶されているデバイスと一致することを検証することが可能です。

  • パブリッククライアントアプリで、ユーザーのアクセストークンをListDevicesAPIリクエストで送信します。

  • 機密クライアントアプリで、 AWS 認証情報を使用して AdminListDevices API リクエストに署名し、ユーザーのユーザー名とユーザープールを送信します。

デバイスの「記憶済み」状態を解除する

ユーザーのデバイスキーは削除できます。これは、ユーザーがデバイスを使用しなくなったと判断した場合や、異常なアクティビティを検出してユーザーにMFA再度完了するように促す場合に実行できます。デバイスを後で再登録するには、新しいデバイスキーを生成して保存する必要があります。

  • パブリッククライアントアプリで、ユーザーのデバイスキーとアクセストークンをForgetDeviceAPIリクエストで送信します。

  • 機密クライアントアプリで、ユーザーのデバイスキーとアクセストークンをAdminForgetDeviceAPIリクエストで送信します。