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

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

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

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

기억된 디바이스 설정

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

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

  2. 기억 장치는 신뢰할 수 있는 장치 인증 흐름도 지원합니다. 이 흐름에서는 사용자가 앱의 보안 요구 사항이나 사용자 기본 설정에 따라 나중에야 로그인하도록 선택할 수 있습니다. MFA 예를 들어 30일, 60일 또는 90일 동안 기기를 신뢰하라는 메시지가 사용자에게 표시될 수 있습니다. 이 날짜를 사용자 지정 속성에 저장하고 해당 날짜에 장치의 기억된 상태를 변경할 수 있습니다. 그런 다음 사용자에게 MFA 코드를 제출하라는 메시지를 다시 표시하고 인증에 성공한 후 장치가 다시 기억되도록 설정해야 합니다.

    기억된 장치는 활성 상태인 사용자 MFA 풀에서만 재정의할 수 있습니다. MFA

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

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

기억하지 않음

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

항상 기억

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

사용자 옵트인

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

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

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

또는 요청을 통해 사용자 풀의 기억된 기기 설정을 구성할 수도 있습니다. CreateUserPoolUpdateUserPoolAPI 자세한 내용은 속성을 참조하십시오. DeviceConfiguration

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

  1. ListDevices그리고 사용자에 대한 디바이스 키 및 해당 메타데이터 목록을 AdminListDevices반환합니다.

  2. GetDevice단일 디바이스의 디바이스 키와 메타데이터를 AdminGetDevice반환합니다.

  3. UpdateDeviceStatus사용자 장치를 기억하거나 기억하지 못하는 것으로 AdminUpdateDeviceStatus설정할 수 있습니다.

  4. ForgetDevice프로필에서 사용자의 인증된 기기를 AdminForgetDevice삭제하세요.

API로 Admin 시작하는 이름을 사용하는 작업은 서버 측 앱에서 사용하기 위한 것이며 자격 증명을 사용하여 승인되어야 합니다. IAM 자세한 내용은 Amazon Cognito 사용자 풀 API 및 사용자 풀 엔드포인트 사용 단원을 참조하십시오.

디바이스 키 가져오기

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

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

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

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

  2. 사용자의 로그인 세션을 완료했음을 표시하는 JSON 웹 토큰 (JWTs) 을 받을 RespondToAuthChallenge때까지 모든 인증 문제에 응답하십시오.

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

  4. 사용자를 위한 새 SRP 비밀번호인 솔트 및 비밀번호 검증기를 생성하세요. 이 함수는 제공 SRP 라이브러리에서 SDKs 사용할 수 있습니다.

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

  6. ConfirmDeviceAPI요청 시 사용자의 액세스 토큰, 장치 키, 장치 이름 및 SRP 암호를 제공하십시오. 사용자 풀이 디바이스를 항상 기억하도록 설정된 경우 사용자 등록이 완료됩니다.

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

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

디바이스로 로그인

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

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

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

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

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

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

  4. RespondToAuthChallengeAPI요청에서, DEVICE_SRP_AUTH 및 에 ChallengeName 대한 USERNAME 매개 변수를 보내십시오. DEVICE_KEY SRP_A

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

  6. SRP라이브러리를 사용하여,, PASSWORD_CLAIM_SIGNATURE PASSWORD_CLAIM_SECRET_BLOCK TIMESTAMPUSERNAME, DEVICE_KEY 매개 변수를 생성하고 제출하십시오. 추가 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 API Cognito를 사용하여 앱에서 다음 기능을 구현할 수 있습니다.

  1. 사용자의 현재 디바이스에 대한 정보를 표시합니다.

  2. 모든 사용자 디바이스 목록을 표시합니다.

  3. 디바이스를 지웁니다.

  4. 디바이스 기억 상태를 업데이트합니다.

다음 설명의 API 요청을 승인하는 액세스 토큰에는 범위가 포함되어야 합니다. aws.cognito.signin.user.admin Amazon Cognito는 Amazon Cognito 사용자 풀을 사용하여 생성하는 모든 액세스 토큰에 이 범위에 대한 클레임을 추가합니다. API 타사는 디바이스와 Amazon MFA Cognito에 인증한 사용자를 별도로 IdPs 관리해야 합니다. 호스팅 UI에서는 aws.cognito.signin.user.admin 범위를 요청할 수 있지만 호스팅 UI는 고급 보안 사용자 로그에 디바이스 정보를 자동으로 추가하며 디바이스 기억 기능을 제공하지 않습니다.

디바이스에 대한 정보 표시

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

  • 퍼블릭 클라이언트 앱에 사용자의 디바이스 정보를 표시하려면 요청에 사용자의 액세스 키와 디바이스 키를 제출하십시오. GetDeviceAPI

  • 기밀 클라이언트 앱에 사용자의 장치 정보를 표시하려면 AWS 자격 증명으로 AdminGetDeviceAPI요청에 서명하고 사용자의 사용자 이름, 장치 키 및 사용자 풀을 제출하십시오.

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

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

  • 퍼블릭 클라이언트 앱에서는 요청에 사용자의 액세스 토큰을 제출하십시오. ListDevicesAPI

  • 기밀 클라이언트 앱에서 AWS 자격 증명으로 AdminListDevicesAPI요청에 서명하고 사용자의 사용자 이름과 사용자 풀을 제출하십시오.

디바이스 지우기

사용자의 디바이스 키를 삭제할 수 있습니다. 사용자가 더 이상 장치를 사용하지 않는다고 판단하거나 비정상적인 활동을 감지하여 사용자에게 다시 완료하라는 메시지를 표시하고 싶을 때 이 방법을 사용하는 것이 좋습니다. MFA 나중에 디바이스를 다시 등록하려면 새 디바이스 키를 생성하여 저장해야 합니다.

  • 퍼블릭 클라이언트 앱에서는 요청 시 사용자의 디바이스 키와 액세스 토큰을 제출하세요. ForgetDeviceAPI

  • 기밀 클라이언트 앱에서 요청에 따라 사용자의 기기 키와 액세스 토큰을 제출하세요. AdminForgetDeviceAPI