

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengumpulkan data untuk perlindungan ancaman dalam aplikasi
<a name="user-pool-settings-viewing-threat-protection-app"></a>

[Autentikasi adaptif](cognito-user-pool-settings-adaptive-authentication.md) Amazon Cognito mengevaluasi tingkat risiko untuk upaya pengambilalihan akun dari detail kontekstual upaya masuk pengguna. Aplikasi Anda harus menambahkan *data konteks* ke permintaan API sehingga perlindungan ancaman Amazon Cognito dapat mengevaluasi risiko dengan lebih akurat. Data konteks adalah informasi seperti alamat IP, agen browser, informasi perangkat, dan header permintaan yang memberikan informasi kontekstual tentang bagaimana pengguna terhubung ke kumpulan pengguna Anda.

Tanggung jawab utama aplikasi yang mengirimkan konteks ini ke Amazon Cognito adalah `EncodedData` parameter dalam permintaan otentikasi ke kumpulan pengguna. Untuk menambahkan data ini ke permintaan, Anda dapat menerapkan Amazon Cognito dengan SDK yang secara otomatis menghasilkan informasi ini untuk Anda, atau Anda dapat menerapkan modul untuk, JavaScript iOS, atau Android yang mengumpulkan data ini. Aplikasi *khusus klien* yang membuat permintaan langsung ke Amazon Cognito harus diterapkan. AWS Amplify SDKs Aplikasi *client-server* yang memiliki server perantara atau komponen API harus mengimplementasikan modul SDK terpisah.

Dalam skenario berikut, front end otentikasi Anda mengelola pengumpulan data konteks pengguna tanpa konfigurasi tambahan:
+ Login terkelola secara otomatis mengumpulkan dan mengirimkan data konteks ke perlindungan ancaman.
+ Semua AWS Amplify pustaka memiliki pengumpulan data konteks yang dibangun ke dalam metode otentikasi mereka.

## Mengirimkan data konteks pengguna dalam aplikasi khusus klien dengan Amplify
<a name="user-pool-settings-viewing-threat-protection-app-amplify"></a>

![\[Gambaran umum pengumpulan data untuk perlindungan ancaman dalam aplikasi Amplify.\]](http://docs.aws.amazon.com/id_id/cognito/latest/developerguide/images/user-pools-asf-amplify-data-collection.png)


Amplify SDKs mendukung klien seluler yang mengautentikasi dengan Amazon Cognito secara langsung. Klien semacam ini membuat permintaan API langsung ke operasi API publik Amazon Cognito. Amplify klien secara otomatis mengumpulkan data konteks untuk perlindungan ancaman secara default.

Amplify aplikasi dengan JavaScript pengecualian. Mereka membutuhkan penambahan [JavaScript modul](#user-pool-settings-viewing-threat-protection-app-additional-resources-js) yang mengumpulkan data konteks pengguna.

Biasanya, aplikasi dalam konfigurasi ini menggunakan operasi API yang tidak diautentikasi seperti [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)dan. [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) [UserContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserContextDataType.html)Objek membantu mengevaluasi risiko lebih akurat untuk operasi ini. Amplify SDKs menambahkan informasi perangkat dan sesi ke `EncodedData` parameter. `UserContextData`

## Mengumpulkan data konteks dalam aplikasi client-server
<a name="user-pool-settings-viewing-threat-protection-app-server-side"></a>

Beberapa aplikasi memiliki tingkat front-end yang mengumpulkan data otentikasi pengguna dan tingkat back-end aplikasi yang mengirimkan permintaan otentikasi ke Amazon Cognito. Ini adalah arsitektur umum di server web dan aplikasi yang didukung oleh layanan mikro. Dalam aplikasi ini, Anda harus mengimpor pustaka pengumpulan data konteks publik.

![\[Ikhtisar otentikasi sisi server dengan data konteks perlindungan ancaman di. JavaScript\]](http://docs.aws.amazon.com/id_id/cognito/latest/developerguide/images/user-pools-asf-non-amplify-data-collection.png)


Biasanya, server aplikasi dalam konfigurasi ini menggunakan operasi API yang diautentikasi seperti [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)dan [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html). [ContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-ContextData)Objek membantu Amazon Cognito mengevaluasi risiko lebih akurat untuk operasi ini. Konten `ContextData` adalah data yang dikodekan yang dilewatkan oleh front end Anda ke server Anda, dan detail tambahan dari permintaan HTTP pengguna ke server Anda. Detail konteks tambahan ini, seperti header HTTP dan alamat IP, memberikan server aplikasi Anda dengan karakteristik lingkungan pengguna.

Server aplikasi Anda mungkin juga melakukan login dengan operasi API yang tidak diautentikasi seperti dan. [InitiateAuth[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) [UserContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-UserContextData)Objek menginformasikan analisis risiko perlindungan ancaman dalam operasi ini. Operasi di pustaka pengumpulan data konteks publik yang tersedia menambahkan informasi keamanan ke `EncodedData` parameter dalam permintaan otentikasi. Selain itu, konfigurasikan kumpulan pengguna Anda untuk menerima data konteks tambahan dan menambahkan IP sumber pengguna ke `IpAddress` parameter`UserContextData`.

**Untuk menambahkan data konteks ke aplikasi client-server**

1. Di aplikasi front-end Anda, kumpulkan data konteks yang dikodekan dari klien dengan [iOS, Android,](#user-pool-settings-viewing-threat-protection-app-additional-resources) atau modul. JavaScript 

1. Lulus data yang dikodekan dan detail permintaan otentikasi ke server aplikasi Anda.

1. Di server aplikasi Anda, ekstrak alamat IP pengguna, header HTTP yang relevan, nama server yang diminta, dan jalur yang diminta dari permintaan HTTP. Isi nilai ini ke [ContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-ContextData)parameter permintaan API Anda ke Amazon Cognito.

1. Isi `EncodedData` parameter permintaan API Anda dengan data perangkat yang dikodekan yang dikumpulkan modul SDK Anda. `ContextData` Tambahkan data konteks ini ke permintaan otentikasi.

## Pustaka data konteks untuk aplikasi client-server
<a name="user-pool-settings-viewing-threat-protection-app-additional-resources"></a>

### JavaScript
<a name="user-pool-settings-viewing-threat-protection-app-additional-resources-js"></a>

`amazon-cognito-advanced-security-data.min.js`Modul mengumpulkan `EncodedData` bahwa Anda dapat meneruskan ke server aplikasi Anda.

Tambahkan `amazon-cognito-advanced-security-data.min.js` modul ke JavaScript konfigurasi Anda. Ganti `<region>` dengan Wilayah AWS dari daftar berikut:`us-east-1`,`us-east-2`,`us-west-2`,`eu-west-1`,`eu-west-2`, atau`eu-central-1`.

```
<script src="https://amazon-cognito-assets.<region>.amazoncognito.com/amazon-cognito-advanced-security-data.min.js"></script>
```

Untuk menghasilkan `encodedContextData` objek yang dapat Anda gunakan dalam `EncodedData` parameter, tambahkan yang berikut ini ke sumber JavaScript aplikasi Anda:

```
var encodedContextData = AmazonCognitoAdvancedSecurityData.getData(_username, _userpoolId, _userPoolClientId);
```

### iOS/Swift
<a name="user-pool-settings-viewing-threat-protection-app-additional-resources-ios"></a>

Untuk menghasilkan data konteks, aplikasi iOS dapat mengintegrasikan [AWSCognitoIdentityProvidermodul](https://github.com/aws-amplify/aws-sdk-ios/tree/main/AWSCognitoIdentityProviderASF) [SDK for iOS Mobile](https://github.com/aws-amplify/aws-sdk-ios/tree/main) ASF.

Untuk mengumpulkan data konteks yang dikodekan untuk perlindungan ancaman, tambahkan cuplikan berikut ke aplikasi Anda:

```
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
<a name="user-pool-settings-viewing-threat-protection-app-additional-resources-android"></a>

Untuk menghasilkan data konteks, aplikasi Android dapat mengintegrasikan [aws-android-sdk-cognitoidentityprovidermodul](https://github.com/aws-amplify/aws-sdk-android/tree/main/aws-android-sdk-cognitoidentityprovider-asf) [Mobile SDK for](https://github.com/aws-amplify/aws-sdk-android/tree/main) Android -asf.

Untuk mengumpulkan data konteks yang dikodekan untuk perlindungan ancaman, tambahkan cuplikan berikut ke aplikasi Anda:

```
UserContextDataProvider provider = UserContextDataProvider.getInstance();
// context here is android application context.
String encodedContextData = provider.getEncodedContextData(context, username, userPoolId, userPoolClientId);
```