

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

# ユーザープール内のユーザーデバイスの使用
<a name="amazon-cognito-user-pools-device-tracking"></a>

Amazon Cognito ユーザープール API を使用してローカルユーザープールのユーザーをサインインさせる場合、[脅威保護](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-threat-protection.html)からのユーザーのアクティビティログをユーザーの各デバイスに関連付けることができます。また、オプションとして、ユーザーが信頼されたデバイスを使用している場合は、多要素認証 (MFA) をスキップするのを許可できます。Amazon Cognito には、デバイス情報がまだ含まれていないサインインへのレスポンスにデバイスキーが含まれます。デバイスキーの形式は `Region_UUID` です。デバイスキー、Secure Remote Password (SRP) ライブラリ、およびデバイス認証を許可するユーザープールがあれば、アプリ内のユーザーに現在のデバイスを信頼するように求めることができ、サインイン時に MFA コードの入力を求める必要がなくなります。

**Topics**
+ [記憶済みデバイスのセットアップ](#amazon-cognito-user-pools-setting-up-remembered-devices)
+ [デバイスキーの取得](#user-pools-remembered-devices-getting-a-device-key)
+ [デバイスでのサインイン](#user-pools-remembered-devices-signing-in-with-a-device)
+ [デバイスの表示、更新、削除](#user-pools-remembered-devices-viewing-updating-forgetting)

## 記憶済みデバイスのセットアップ
<a name="amazon-cognito-user-pools-setting-up-remembered-devices"></a>

Amazon Cognito ユーザープールでは、ユーザーの各デバイスを固有のデバイス識別子、つまりデバイスキーに関連付けることができます。サインイン時にデバイスキーを提示してデバイス認証を実行すると、*信頼されたデバイス*の認証フローを使用してアプリケーションを設定できます。このフローでは、アプリケーションのセキュリティ要件またはユーザーの設定に応じて、後まで MFA を使わずにサインインする選択肢をユーザーに提示できます。この期間の終了時に、アプリケーションはデバイスのステータスを *[記憶されていない]* に変更し、ユーザーはデバイスを記憶することを確定するまで MFA を使用してサインインする必要があります。例えば、アプリケーションは 30、60、または 90 日間、デバイスを信頼するようにユーザーに求める場合があります。この日付をカスタム属性に保存し、その日にデバイスの記憶されたステータスを変更できます。次に、MFA コードを送信するとともに、認証が完了した後にデバイスを再度記憶するように設定するように、ユーザーに再度求める必要があります。

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

ユーザーが記憶されているデバイスでログインする場合、認証フロー中に追加のデバイス認証を実行する必要があります。詳細については、「[デバイスでのサインイン](#user-pools-remembered-devices-signing-in-with-a-device)」を参照してください。

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

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

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

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

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

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

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) または [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエストで、ユーザープールの記憶デバイス設定を構成することもできます。詳細については、[DeviceConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-DeviceConfiguration) のプロパティを参照してください。

Amazon Cognito ユーザープール API には記憶されているデバイスに対してさらに 2 つのオペレーションがあります。

1. [ListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListDevices.html) と [AdminListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html) は、ユーザーのデバイスキーとそのメタデータのリストを返します。

1. [GetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html) と [AdminGetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html) は、単一のデバイスのデバイスキーとメタデータを返します。

1. [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html) と [AdminUpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateDeviceStatus.html) は、ユーザーのデバイスを記憶済みまたは未記憶として設定します。

1. [ForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgetDevice.html) と [AdminForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminForgetDevice.html) は、ユーザーの確認済みデバイスをプロファイルから削除します。

名前が `Admin` で始まる API オペレーションはサーバー側アプリで使用するもので、IAM 認証情報を使用して認証する必要があります。詳細については、「[API、OIDC、マネージドログインページの認証についての理解](authentication-flows-public-server-side.md#user-pools-API-operations)」を参照してください。

## デバイスキーの取得
<a name="user-pools-remembered-devices-getting-a-device-key"></a>

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

ユーザーが信頼できるデバイスを使用してサインインする前に、アプリはデバイスキーを確認して追加情報を提供する必要があります。デバイスキー、わかりやすい名前、パスワード検証ツール、およびソルトを使用してユーザーのデバイスを確認する [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) リクエストを Amazon Cognito に生成します。ユーザープールでオプトインデバイス認証を設定した場合、Amazon Cognito は `ConfirmDevice` リクエストに、ユーザーは現在のデバイスを記憶するかどうかを選択する必要があるプロンプトで応答する必要があります。[UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html) リクエストでユーザーが選択した内容を返信します。

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

**新しいデバイスキーを取得するには**

1. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API リクエストを使用してユーザーのサインインセッションを開始します。

1. ユーザーのサインインセッションが完了したことをマークする JSON Web トークン (JWT) を受け取るまで、すべての認証チャレンジに [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) で応答します。

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

1. ユーザー用の新しい SRP シークレット、つまりソルトおよびパスワード検証ツールを生成します。この関数は SRP ライブラリを提供する SDK で使用できます。

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

1. [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) API リクエストでユーザーのアクセストークン、デバイスキー、デバイス名、SRP シークレットを指定します。ユーザープールがデバイスを **[常に記憶する]** に設定されていれば、ユーザー登録は完了です。

1. Amazon Cognito が `"UserConfirmationNecessary": true` で `ConfirmDevice` に応答した場合は、デバイスを記憶するかどうかを選択するようユーザーに促します。ユーザーがデバイスを記憶すると断言したら、ユーザーのアクセストークン、デバイスキー、および `"DeviceRememberedStatus": "remembered"` を使用して [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html) API リクエストを生成します。

1. Amazon Cognito にデバイスを記憶するように指示した場合、次回のサインイン時に MFA チャレンジの代わりに `DEVICE_SRP_AUTH` チャレンジが表示されます。

## デバイスでのサインイン
<a name="user-pools-remembered-devices-signing-in-with-a-device"></a>

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

[カスタム認証チャレンジ Lambda トリガー](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html)を使用するフローでデバイス認証を実行するには、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API リクエストで `DEVICE_KEY` パラメータを渡します。ユーザーがすべてのチャレンジに成功し、`CUSTOM_CHALLENGE` チャレンジが `true` の `issueTokens` 値を返すと、Amazon Cognito は最後の 1 つの `DEVICE_SRP_AUTH` チャレンジを返します。

**デバイスでのサインインするには**

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

1. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API リクエストを使用してユーザーのサインインセッションを開始します。`USER_SRP_AUTH`、`REFRESH_TOKEN_AUTH`、`USER_PASSWORD_AUTH`、または `CUSTOM_AUTH` の `AuthFlow` を選択します。`AuthParameters` で、ユーザーのデバイスキーを `DEVICE_KEY` パラメータに追加し、選択したログインフローに必要なその他のパラメータを含めます。

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

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

1. [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) API リクエストで、`DEVICE_SRP_AUTH` の `ChallengeName` と `USERNAME`、`DEVICE_KEY`、および `SRP_A` のパラメータを送信します。

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

1. SRP ライブラリを使用して `PASSWORD_CLAIM_SIGNATURE`、`PASSWORD_CLAIM_SECRET_BLOCK`、`TIMESTAMP`、`USERNAME`、`DEVICE_KEY` パラメータを生成して送信します。これらは追加の `RespondToAuthChallenge` リクエストで送信してください。

1. ユーザーの JWT を受け取るまで、追加のチャレンジを完了してください。

次の擬似コードは、`DEVICE_PASSWORD_VERIFIER` チャレンジレスポンスの値を計算する方法を示しています。デバイスによる SRP 認証の場合は、ユーザーの*新しい* SRP シークレット (新しい高エントロピーパスワード `DeviceSecret`、ソルト、および関連するパスワード検証子) を生成します。これらの値は、ユーザーの SRP 認証に使用されるパスワード、ソルト、検証子とは異なります。これらはデバイス認証専用であり、デバイスにのみ保存されます。ユーザーのデバイスの SRP シークレットを生成する関数は、[SRP ライブラリ](https://github.com/secure-remote-password/implementations)にあり、さまざまな SDK で利用できます。

```
PASSWORD_CLAIM_SECRET_BLOCK = SECRET_BLOCK
TIMESTAMP = "Tue May 7 00:09:40 UTC 2025"
k = SHA256(N || g) as a non-negative integer in big-endian
u = SHA256(SRP_A || SRP_B) as a non-negative integer in big-endian
x = SHA256(salt || SHA256(DeviceGroupKey || DeviceKey || ":" || DeviceSecret)) as a non-negative integer in big-endian
S_USER = (SRP_B - k * g^x)^(a + u * x) % N
K_USER = HKDF_HMAC_SHA256(salt=u, ikm=S_USER, info="Caldera Derived Key", length=16 bytes)
PASSWORD_CLAIM_SIGNATURE = Base64(HMAC_SHA256(key=K_USER, message=(DeviceGroupKey || DeviceKey || PASSWORD_CLAIM_SECRET_BLOCK || TIMESTAMP)))
```

## デバイスの表示、更新、削除
<a name="user-pools-remembered-devices-viewing-updating-forgetting"></a>

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

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

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

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

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

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

**デバイスに関する情報を表示する**  
ユーザーのデバイスに関する情報をクエリして、そのデバイスが現在も使用されているかどうかを判断できます。例えば、記憶されているデバイスが 90 日間サインインしていない場合に、そのデバイスを非アクティブ化することができます。
+ パブリッククライアントアプリにユーザーのデバイス情報を表示するには、ユーザーのアクセスキーとデバイスキーを [GetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html) API リクエストで送信します。
+ 機密クライアントアプリにユーザーのデバイス情報を表示するには、 AWS 認証情報を使用して [AdminGetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html) API リクエストに署名し、ユーザーのユーザー名、デバイスキー、ユーザープールを送信します。

**ユーザーのすべてのデバイスのリストを表示する**  
ユーザーのすべてのデバイスとそのプロパティのリストを表示できます。例えば、現在のデバイスが記憶されているデバイスと一致することを検証することが可能です。
+ パブリッククライアントアプリでは、[ListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListDevices.html) API リクエストでユーザーのアクセストークンを送信します。
+ 機密クライアントアプリで、 AWS 認証情報を使用して [AdminListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html) API リクエストに署名し、ユーザーのユーザー名とユーザープールを送信します。

**デバイスの「記憶済み」状態を解除する**  
ユーザーのデバイスキーは削除できます。これは、ユーザーがデバイスを使用しなくなったと判断した場合や、異常なアクティビティを検出してユーザーに MFA を再度完了するように促す場合に役立ちます。デバイスを後で再登録するには、新しいデバイスキーを生成して保存する必要があります。
+ パブリッククライアントアプリでは、[ForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgetDevice.html) API リクエストでユーザーのデバイスキーとアクセストークンを送信します。
+ 機密クライアントアプリでは、[AdminForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminForgetDevice.html) API リクエストでユーザーのデバイスキーとアクセストークンを送信します。