

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 사용자 풀의 사용자 디바이스 작업
<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}}`입니다. 디바이스 키, SRP(Secure Remote Password) 라이브러리, 디바이스 인증을 허용하는 사용자 풀을 사용하면, 앱 사용자에게 현재 디바이스를 신뢰하라는 메시지를 표시하고 로그인 시 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 콘솔을 통해 기억된 디바이스 기능을 설정할 때, [**항상(Always)**], [**사용자 옵트인(User Opt-In)**] 및 [**아니요(No)**]라는 세 가지 옵션이 제공됩니다.

**기억하지 않음**  
사용자 풀이 사용자가 로그인할 때 디바이스를 기억하라는 메시지를 표시하지 않습니다.

**항상 기억**  
앱이 사용자의 디바이스를 확인하면 사용자 풀이 항상 디바이스를 기억하고 향후 디바이스 로그인에 성공할 때 MFA 챌린지를 반환하지 않습니다.

**사용자 옵트인**  
앱이 사용자의 디바이스를 확인하더라도 사용자 풀이 MFA 챌린지를 자동으로 억제하지 않습니다. 사용자에게 디바이스를 기억할지 여부를 선택하라는 메시지를 표시해야 합니다.

**항상 기억** 또는 **사용자 옵트인**을 선택하는 경우, Amazon Cognito는 사용자가 미확인 디바이스에서 로그인할 때마다 디바이스 식별자 키와 보안 암호를 생성합니다. 디바이스 키는 사용자가 디바이스 인증을 수행할 때 앱이 사용자 풀에 보내는 초기 식별자입니다.

자동으로 기억되든 옵트인되든 관계없이 확인된 각 사용자 디바이스에서 디바이스 식별자 키와 보안 암호를 사용하여 사용자가 로그인할 때마다 디바이스를 인증할 수 있습니다.

또한 [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에는 기억된 디바이스에 대한 추가 작업이 있습니다.

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는 응답으로 새 디바이스 키를 반환합니다. 퍼블릭 클라이언트측 앱에서는 향후 요청에 포함할 수 있도록 앱 스토리지에 디바이스 키를 저장합니다. 기밀 서버측 앱에서는 사용자의 디바이스 키로 브라우저 쿠키 또는 다른 클라이언트측 토큰을 설정합니다.

사용자가 신뢰할 수 있는 디바이스로 로그인하려면 먼저 앱에서 디바이스 키를 확인하고 추가 정보를 제공해야 합니다. Amazon Cognito에 [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) 요청을 생성하여 디바이스 키, 친숙한 이름, 암호 확인 도구 및 솔트를 사용해 사용자의 디바이스를 확인합니다. 사용자 풀에 옵트인 디바이스 인증을 구성한 경우, 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 웹 토큰(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는 하나의 최종 `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 인증의 경우 새로운 고엔트로피 암호 `DeviceSecret`, 솔트 및 관련 암호 확인자 등 사용자를 위한 *새* SRP 암호를 생성합니다. 이러한 값은 사용자의 SRP 인증에 사용되는 암호, 솔트 및 확인자와 다릅니다. 디바이스 인증에만 사용되며 디바이스에만 저장됩니다. 사용자의 디바이스에 대한 SRP 보안 암호를 생성하는 함수는 다양한 SDK에서 사용할 수 있는 [SRP 라이브러리](https://github.com/secure-remote-password/implementations)에서 사용할 수 있습니다.

```
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 요청으로 사용자의 디바이스 키와 액세스 토큰을 제출합니다.