사용자 풀의 사용자 디바이스 작업 - Amazon Cognito

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

사용자 풀의 사용자 디바이스 작업

Amazon Cognito 사용자 풀 API로 로컬 사용자 풀 사용자를 로그인하면 고급 보안 기능의 사용자 활동 로그를 각 디바이스와 연결할 수 있으며, 선택적으로 사용자가 신뢰할 수 있는 디바이스를 사용하는 경우 다중 인증(MFA)을 건너뛰도록 허용할 수 있습니다. Amazon Cognito는 디바이스 정보가 아직 포함되어 있지 않은 모든 로그인에 대한 응답에 디바이스 키를 포함시킵니다. 디바이스 키의 형식은 Region_UUID입니다. 디바이스 키, SRP(Secure Remote Password) 라이브러리, 디바이스 인증을 허용하는 사용자 풀을 사용하면, 앱 사용자에게 현재 디바이스를 신뢰하라는 메시지를 표시하고 로그인 시 MFA 코드를 묻는 메시지를 더 이상 표시하지 않을 수 있습니다.

기억된 디바이스 설정

Amazon Cognito 사용자 풀을 사용하면 각 사용자의 디바이스를 고유한 디바이스 식별자인 디바이스 키와 연결할 수 있습니다. 로그인 시 디바이스 키를 제시하고 디바이스 인증을 수행하는 경우 두 가지 기능을 활용할 수 있습니다.

  1. 고급 보안 기능을 사용하면 보안 및 분석 목적으로 특정 디바이스에서의 사용자 활동을 모니터링할 수 있습니다. 사용자가 로그인하면 각 사용자와 디바이스를 인증하고 활동 로그에 디바이스 정보를 추가하는 옵션이 앱에 있습니다.

  2. 디바이스 기억 기능은 신뢰할 수 있는 디바이스 인증 흐름도 지원합니다. 여기서 사용자는 앱의 보안 요구 사항에 맞는 기간 동안 MFA 없이 로그인하도록 선택할 수 있습니다. 사용자에게 MFA 코드를 제출하라는 메시지를 다시 표시하려는 경우 디바이스의 기억된 상태를 변경할 수 있습니다.

    기억된 디바이스는 MFA가 활성화된 사용자 풀에서만 MFA를 재정의할 수 있습니다.

사용자가 기억된 디바이스로 로그인하면 인증 흐름에서 추가 디바이스 인증을 수행해야 합니다. 자세한 내용은 디바이스로 로그인 섹션을 참조하세요.

디바이스 추적 내 사용자 풀의 로그인 경험 탭에서 사용자 풀이 디바이스를 기억하도록 구성합니다. Amazon Cognito 콘솔을 통해 기억된 디바이스 기능을 설정할 때, [항상(Always)], [사용자 옵트인(User Opt-In)] 및 [아니요(No)]라는 세 가지 옵션이 제공됩니다.

기억하지 않음

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

항상 기억

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

사용자 옵트인

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

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

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

또한 CreateUserPool 또는 UpdateUserPool API 요청에서 사용자 풀의 기억된 디바이스 설정을 구성할 수 있습니다. 자세한 내용은 DeviceConfiguration 속성을 참조하세요.

Amazon Cognito 사용자 풀 API에는 기억된 디바이스에 대한 추가 작업이 있습니다.

  1. ListDevicesAdminListDevices는 사용자에 대한 디바이스 키 및 메타데이터 목록을 반환합니다.

  2. GetDeviceAdminGetDevice는 단일 디바이스에 대한 디바이스 키와 메타데이터를 반환합니다.

  3. UpdateDeviceStatusAdminUpdateDeviceStatus는 사용자의 디바이스를 기억됨 또는 기억되지 않음으로 설정합니다.

  4. ForgetDeviceAdminForgetDevice는 프로필에서 사용자의 확인된 디바이스를 제거합니다.

이름이 Admin으로 시작하는 API 작업은 서버측 앱에서 사용하기 위한 것이며 IAM 보안 인증 정보로 승인되어야 합니다. 자세한 내용은 Amazon Cognito 사용자 풀 API 및 사용자 풀 엔드포인트 사용 섹션을 참조하세요.

디바이스 키 가져오기

사용자가 사용자 풀 API를 사용하여 로그인하고 인증 파라미터에 DEVICE_KEY로 디바이스 키를 포함하지 않을 때마다 Amazon Cognito는 응답으로 새 디바이스 키를 반환합니다. 퍼블릭 클라이언트측 앱에서는 향후 요청에 포함할 수 있도록 앱 스토리지에 디바이스 키를 저장합니다. 기밀 서버측 앱에서는 사용자의 디바이스 키로 브라우저 쿠키 또는 다른 클라이언트측 토큰을 설정합니다.

사용자가 신뢰할 수 있는 디바이스로 로그인하려면 먼저 앱에서 디바이스 키를 확인하고 추가 정보를 제공해야 합니다. Amazon Cognito에 ConfirmDevice 요청을 생성하여 디바이스 키, 친숙한 이름, 암호 확인 도구 및 솔트를 사용해 사용자의 디바이스를 확인합니다. 사용자 풀에 옵트인 디바이스 인증을 구성한 경우, Amazon Cognito는 ConfirmDevice 요청에 응답하여 사용자가 현재 디바이스를 기억할지 여부를 선택해야 한다는 메시지를 표시합니다. UpdateDeviceStatus 요청에서 사용자의 선택 사항으로 응답합니다.

사용자의 디바이스를 확인하지만 기억하도록 설정하지 않은 경우 Amazon Cognito는 연결을 저장하지만 디바이스 키를 제공할 때 디바이스 이외 로그인을 진행합니다. 디바이스는 사용자 보안 및 문제 해결에 유용한 로그를 생성할 수 있습니다. 확인되었지만 기억되지 않은 디바이스는 로그인 기능을 활용하지 않지만 보안 모니터링 로그 기능은 활용합니다. 앱 클라이언트의 고급 보안 기능을 활성화하고 요청에 디바이스 풋프린트를 인코딩하면 Amazon Cognito가 사용자 이벤트를 확인된 디바이스와 연결합니다.

새 디바이스 키를 얻으려면
  1. InitiateAuth API 요청으로 사용자의 로그인 세션을 시작합니다.

  2. 사용자의 로그인 세션이 완료되었음을 표시하는 JSON 웹 토큰(JWT)을 받을 때까지 RespondToAuthChallenge를 사용하여 모든 인증 챌린지에 응답합니다.

  3. 앱에서 Amazon Cognito가 RespondToAuthChallenge 또는 InitiateAuth 응답의 NewDeviceMetadata에 반환하는 값(DeviceGroupKeyDeviceKey)을 기록합니다.

  4. 사용자를 위한 새 SRP 비밀(솔트 및 암호 검증자)을 생성합니다. 이 기능은 SRP 라이브러리를 제공하는 SDK에서 사용할 수 있습니다.

  5. 사용자에게 디바이스 이름을 입력하라는 메시지를 표시하거나 사용자의 디바이스 특성에서 이름을 생성합니다.

  6. ConfirmDevice API 요청에서 사용자의 액세스 토큰, 디바이스 키, 디바이스 이름 및 SRP 비밀을 제공합니다. 사용자 풀이 디바이스를 항상 기억하도록 설정된 경우 사용자 등록이 완료됩니다.

  7. Amazon Cognito가 "UserConfirmationNecessary": trueConfirmDevice에 응답한 경우, 사용자에게 디바이스를 기억할지 선택하라는 메시지를 표시합니다. 사용자가 디바이스를 기억하겠다고 확인하면 사용자의 액세스 토큰, 디바이스 키, "DeviceRememberedStatus": "remembered" 등을 사용하여 UpdateDeviceStatus API 요청을 생성합니다.

  8. Amazon Cognito에 디바이스를 기억하도록 지시한 경우, 다음에 로그인할 때 MFA 챌린지 대신 DEVICE_SRP_AUTH 챌린지가 표시됩니다.

디바이스로 로그인

사용자의 디바이스를 기억하도록 구성한 후에는 사용자가 동일한 디바이스 키로 로그인할 때 Amazon Cognito에서 더 이상 MFA 코드 제출을 요구하지 않습니다. 디바이스 인증은 MFA 인증 챌린지를 디바이스 인증 챌린지로 대체할 뿐입니다. 디바이스 인증만으로는 사용자가 로그인될 수 없습니다. 사용자는 먼저 암호 또는 사용자 지정 챌린지로 인증을 완료해야 합니다. 기억된 디바이스에서 사용자를 인증하는 프로세스는 다음과 같습니다.

사용자 지정 인증 챌린지 Lambda 트리거를 사용하는 흐름에서 디바이스 인증을 수행하려면 InitiateAuth API 요청에 DEVICE_KEY 파라미터를 전달합니다. 사용자가 모든 챌린지에 성공하고 CUSTOM_CHALLENGE 챌린지가 trueissueTokens 값을 반환하면 Amazon Cognito는 하나의 최종 DEVICE_SRP_AUTH 챌린지를 반환합니다.

디바이스로 로그인하려면
  1. 클라이언트 스토리지에서 사용자의 디바이스 키를 검색합니다.

  2. InitiateAuth API 요청으로 사용자의 로그인 세션을 시작합니다. USER_SRP_AUTH, REFRESH_TOKEN_AUTH, USER_PASSWORD_AUTH 또는 CUSTOM_AUTHAuthFlow를 선택합니다. AuthParameters에서 사용자의 디바이스 키를 DEVICE_KEY 파라미터에 추가하고 선택한 로그인 흐름에 필요한 기타 파라미터를 포함합니다.

    1. 인증 챌린지에 대한 PASSWORD_VERIFIER 응답의 파라미터에 DEVICE_KEY를 전달할 수도 있습니다.

  3. 응답으로 DEVICE_SRP_AUTH 챌린지를 받을 때까지 챌린지 응답을 완료합니다.

  4. RespondToAuthChallenge API 요청에서 DEVICE_SRP_AUTHChallengeNameUSERNAME, DEVICE_KEYSRP_A에 대한 파라미터를 전송합니다.

  5. Amazon Cognito가 DEVICE_PASSWORD_VERIFIER 챌린지로 응답합니다. 이 챌린지 응답에는 SECRET_BLOCKSRP_B 값이 포함됩니다.

  6. SRP 라이브러리를 사용하여 PASSWORD_CLAIM_SIGNATURE, PASSWORD_CLAIM_SECRET_BLOCK, TIMESTAMP, USERNAMEDEVICE_KEY 파라미터를 생성하고 제출합니다. 추가 RespondToAuthChallenge 요청으로 제출해야 합니다.

  7. 사용자의 JWT를 받을 때까지 추가 챌린지를 완료합니다.

다음 유사 코드는 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로 생성하는 모든 액세스 토큰에 이 범위에 대한 클레임을 추가합니다. 서드 파티 IdP는 Amazon Cognito에 인증하는 사용자의 디바이스와 MFA를 별도로 관리해야 합니다. 호스팅 UI에서는 aws.cognito.signin.user.admin 범위를 요청할 수 있지만 호스팅 UI는 고급 보안 사용자 로그에 디바이스 정보를 자동으로 추가하며 디바이스 기억 기능을 제공하지 않습니다.

디바이스에 대한 정보 표시

사용자 디바이스에 대한 정보를 쿼리하여 디바이스가 현재 사용 중인지 확인할 수 있습니다. 예를 들어 90일 동안 로그인하지 않은 기억된 디바이스를 비활성화할 수 있습니다.

  • 퍼블릭 클라이언트 앱에 사용자의 디바이스 정보를 표시하려면 GetDevice API 요청에서 사용자의 액세스 키와 디바이스 키를 제출합니다.

  • 기밀 클라이언트 앱에 사용자의 디바이스 정보를 표시하려면 AWS 보안 인증 정보로 AdminGetDevice API 요청에 서명하고 사용자의 사용자 이름, 디바이스 키 및 사용자 풀을 제출합니다.

모든 사용자 디바이스 목록 표시

모든 사용자 디바이스 및 속성 목록을 표시할 수 있습니다. 예를 들어 현재 디바이스가 기억된 디바이스와 일치하는지 확인할 수 있습니다.

  • 퍼블릭 클라이언트 앱에서는 ListDevices API 요청으로 사용자의 액세스 토큰을 제출합니다.

  • 기밀 클라이언트 앱에서는 AWS 보안 인증 정보로 AdminListDevices API 요청에 서명하고 사용자의 사용자 이름 및 사용자 풀을 제출합니다.

디바이스 지우기

사용자의 디바이스 키를 삭제할 수 있습니다. 사용자가 더 이상 디바이스를 사용하지 않는 것으로 확인되거나 비정상적인 활동을 탐지하여 사용자에게 MFA를 다시 완료하도록 요구하려는 경우 이 방법을 사용하는 것이 좋습니다. 나중에 디바이스를 다시 등록하려면 새 디바이스 키를 생성하여 저장해야 합니다.

  • 퍼블릭 클라이언트 앱에서는 ForgetDevice API 요청으로 사용자의 디바이스 키와 액세스 토큰을 제출합니다.

  • 기밀 클라이언트 앱에서는 AdminForgetDevice API 요청으로 사용자의 디바이스 키와 액세스 토큰을 제출합니다.