기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
애플리케이션에서 위협 방지를 위한 데이터 수집
Amazon Cognito 적응형 인증은 사용자의 로그인 시도에 대한 컨텍스트 세부 정보에서 시도된 계정 탈취에 대한 위험 수준을 평가합니다. Amazon Cognito 위협 방지가 위험을 보다 정확하게 평가할 수 있도록 애플리케이션은 API 요청에 컨텍스트 데이터를 추가해야 합니다. 컨텍스트 데이터는 IP 주소, 브라우저 에이전트, 디바이스 정보 및 요청 헤더와 같은 정보로, 사용자가 사용자 풀에 연결된 방식에 대한 컨텍스트 정보를 제공합니다.
Amazon Cognito에 이 컨텍스트를 제출하는 애플리케이션의 핵심 책임은 사용자 풀에 대한 인증 요청의 EncodedData
파라미터입니다. 요청에 이 데이터를 추가하려면 이 정보를 자동으로 생성하는 SDK를 사용하여 Amazon Cognito를 구현하거나 이 데이터를 수집하는 JavaScript, iOS 또는 Android용 모듈을 구현할 수 있습니다. Amazon Cognito에 직접 요청하는 클라이언트 전용 애플리케이션은 AWS Amplify SDKs 구현해야 합니다. 중간 서버 또는 API 구성 요소가 있는 클라이언트 서버 애플리케이션은 별도의 SDK 모듈을 구현해야 합니다.
다음 시나리오에서 인증 프런트 엔드는 추가 구성 없이 사용자 컨텍스트 데이터 수집을 관리합니다.
-
관리형 로그인은 컨텍스트 데이터를 자동으로 수집하여 위협 보호에 제출합니다.
-
모든 AWS Amplify 라이브러리에는 인증 방법에 컨텍스트 데이터 수집이 내장되어 있습니다.
Amplify를 사용하여 클라이언트 전용 애플리케이션에서 사용자 컨텍스트 데이터 제출

Amplify SDK는 Amazon Cognito로 직접 인증하는 모바일 클라이언트를 지원합니다. 이러한 유형의 클라이언트는 Amazon Cognito 퍼블릭 API 작업에 직접 API를 요청합니다. Amplify 클라이언트는 기본적으로 위협 보호를 위해 컨텍스트 데이터를 자동으로 수집합니다.
JavaScript를 사용한 Amplify 애플리케이션은 예외입니다. 사용자 컨텍스트 데이터를 수집하는 JavaScript 모듈을 추가해야 합니다.
일반적으로 이 구성의 애플리케이션은 InitiateAuth 및 RespondToAuthChallenge와 같은 인증되지 않은 API 작업을 사용합니다. UserContextData 개체는 이러한 작업에 대한 위험을 보다 정확하게 평가하는 데 도움이 됩니다. Amplify SDK는 디바이스 및 세션 정보를 UserContextData
의 EncodedData
파라미터에 추가합니다.
클라이언트-서버 애플리케이션에서 컨텍스트 데이터 수집
일부 애플리케이션에는 사용자 인증 데이터를 수집하는 프런트 엔드 계층과 Amazon Cognito에 인증 요청을 제출하는 애플리케이션 백 엔드 계층이 있습니다. 이는 마이크로서비스가 지원하는 웹서버 및 애플리케이션의 일반적인 아키텍처입니다. 이러한 애플리케이션에서는 퍼블릭 컨텍스트 데이터 수집 라이브러리를 가져와야 합니다.

일반적으로 이 구성의 애플리케이션 서버는 AdminInitiateAuth 및 AdminRespondToAuthChallenge와 같은 인증된 API 작업을 사용합니다. ContextData 개체는 Amazon Cognito가 이러한 작업에 대한 위험을 보다 정확하게 평가하는 데 도움이 됩니다. ContextData
의 내용은 프런트 엔드가 서버에 전달한 인코딩된 데이터와 서버에 대한 사용자의 HTTP 요청에서 추가 세부 정보입니다. HTTP 헤더 및 IP 주소와 같은 이러한 추가 컨텍스트 세부 정보는 애플리케이션 서버에 사용자 환경의 특성을 제공합니다.
애플리케이션 서버는 InitiateAuth 및 RespondToAuthChallenge와 같은 인증되지 않은 API 작업으로 로그인할 수도 있습니다. UserContextData 객체는 이러한 작업에서 위협 보호 위험 분석을 알립니다. 사용 가능한 퍼블릭 컨텍스트 데이터 수집 라이브러리의 작업은 인증 요청의 EncodedData
파라미터에 보안 정보를 추가합니다. 또한 추가 컨텍스트 데이터를 허용하도록 사용자 풀을 구성하고 사용자의 소스 IP를 UserContextData
의 IpAddress
파라미터에 추가합니다.
클라이언트-서버 애플리케이션에 컨텍스트 데이터를 추가하는 방법
-
프런트엔드 애플리케이션에서 iOS, Android 또는 JavaScript 모듈을 사용하여 클라이언트에서 인코딩된 컨텍스트 데이터를 수집합니다.
-
인코딩된 데이터와 인증 요청의 세부 정보를 애플리케이션 서버에 전달합니다.
-
애플리케이션 서버에서 HTTP 요청에서 사용자의 IP 주소, 관련 HTTP 헤더, 요청된 서버 이름 및 요청된 경로를 추출합니다. Amazon Cognito에 대한 API 요청의 ContextData 파라미터에 이러한 값을 채웁니다.
-
API 요청에서
ContextData
의EncodedData
파라미터를 SDK 모듈이 수집한 인코딩된 디바이스 데이터로 채웁니다. 이 컨텍스트 데이터를 인증 요청에 추가합니다.
클라이언트-서버 애플리케이션을 위한 컨텍스트 데이터 라이브러리
JavaScript
amazon-cognito-advanced-security-data.min.js
모듈은 애플리케이션 서버에 전달할 수 있는 EncodedData
를 수집합니다.
JavaScript 구성에 amazon-cognito-advanced-security-data.min.js
모듈을 추가합니다. 를 , us-east-1
, us-east-2
, us-west-2
, eu-west-2
또는 AWS 리전 목록에서 eu-west-1
<region>
로 바꿉니다eu-central-1
.
<script src="https://amazon-cognito-assets.<region>.amazoncognito.com/amazon-cognito-advanced-security-data.min.js"></script>
EncodedData
파라미터에서 사용할 수 있는 encodedContextData
개체를 생성하려면 JavaScript 애플리케이션 소스에 다음을 추가합니다.
var encodedContextData = AmazonCognitoAdvancedSecurityData.getData(_username, _userpoolId, _userPoolClientId);
iOS/Swift
컨텍스트 데이터를 생성하기 위해 iOS 애플리케이션은 Mobile SDK for iOS
위협 보호를 위해 인코딩된 컨텍스트 데이터를 수집하려면 애플리케이션에 다음 코드 조각을 추가합니다.
import AWSCognitoIdentityProviderASF let deviceId = getDeviceId() let encodedContextData = AWSCognitoIdentityProviderASF.userContextData( userPoolId, username: username, deviceId: deviceId, userPoolClientId: userPoolClientId) /** * Reuse DeviceId from keychain or generate one for the first time. */ func getDeviceId() -> String { let deviceIdKey = getKeyChainKey(namespace: userPoolId, key: "AWSCognitoAuthAsfDeviceId") if let existingDeviceId = self.keychain.string(forKey: deviceIdKey) { return existingDeviceId } let newDeviceId = UUID().uuidString self.keychain.setString(newDeviceId, forKey: deviceIdKey) return newDeviceId } /** * Get a namespaced keychain key given a namespace and key */ func getKeyChainKey(namespace: String, key: String) -> String { return "\(namespace).\(key)" }
Android
컨텍스트 데이터를 생성하기 위해 Android 애플리케이션은 Mobile SDK for Android
위협 보호를 위해 인코딩된 컨텍스트 데이터를 수집하려면 애플리케이션에 다음 코드 조각을 추가합니다.
UserContextDataProvider provider = UserContextDataProvider.getInstance(); // context here is android application context. String encodedContextData = provider.getEncodedContextData(context, username, userPoolId, userPoolClientId);