

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

# Pemicu Lambda generasi pra token
<a name="user-pool-lambda-pre-token-generation"></a>

Karena Amazon Cognito memanggil pemicu ini sebelum pembuatan token, Anda dapat menyesuaikan klaim dalam token kumpulan pengguna. Dengan **fitur Dasar** dari versi satu atau peristiwa pemicu pembuatan token `V1_0` pra, Anda dapat menyesuaikan token identitas (ID). Di kumpulan pengguna dengan paket fitur Essentials atau Plus, Anda dapat membuat versi dua atau memicu peristiwa dengan kustomisasi token akses, dan versi tiga atau peristiwa `V2_0` `V3_0` pemicu dengan kustomisasi token akses untuk hibah kredensial-klien machine-to-machine (M2M).

Amazon Cognito mengirimkan `V1_0` acara sebagai permintaan ke fungsi Anda dengan data yang akan ditulis ke token ID. A `V2_0` atau `V3_0` peristiwa adalah permintaan tunggal dengan data yang Amazon Cognito akan menulis ke identitas dan token akses. Untuk menyesuaikan kedua token, Anda harus memperbarui fungsi Anda untuk menggunakan versi pemicu dua atau tiga, dan mengirim data untuk kedua token dalam respons yang sama.

Amazon Cognito menerapkan respons peristiwa versi dua untuk mengakses token dari otentikasi pengguna, di mana pengguna manusia telah mempresentasikan kredensialnya ke kumpulan pengguna Anda. Respons peristiwa versi tiga berlaku untuk token akses dari otentikasi pengguna dan otentikasi mesin, di mana sistem otomatis mengotorisasi permintaan token akses dengan rahasia klien aplikasi. Selain keadaan token akses yang dihasilkan, versi dua dan tiga peristiwa identik.

Pemicu Lambda ini dapat menambah, menghapus, dan memodifikasi beberapa klaim dalam identitas dan token akses sebelum Amazon Cognito menerbitkannya ke aplikasi Anda. Untuk menggunakan fitur ini, kaitkan fungsi Lambda dari konsol kumpulan pengguna Amazon Cognito atau perbarui `LambdaConfig` kumpulan pengguna Anda melalui AWS Command Line Interface ().AWS CLI

## Versi acara
<a name="user-pool-lambda-pre-token-generation-event-versions"></a>

Kumpulan pengguna Anda dapat mengirimkan versi berbeda dari peristiwa pemicu pembuatan token pra ke fungsi Lambda Anda. `V1_0`Pemicu memberikan parameter untuk modifikasi token ID. A `V2_0` atau `V3_0` pemicu memberikan parameter untuk yang berikut ini.

1. Fungsi `V1_0` pemicu.

1. Kemampuan untuk menyesuaikan token akses.

1. Kemampuan untuk meneruskan tipe data kompleks ke ID dan mengakses nilai klaim token:
   + String
   + Number
   + Boolean
   + Array string, angka, boolean, atau kombinasi dari semua ini
   + JSON

**catatan**  
Dalam token ID, Anda dapat mengisi objek kompleks dengan nilai klaim kecuali`phone_number_verified`,, `email_verified``updated_at`, dan`address`.

Kumpulan pengguna mengirimkan `V1_0` acara secara default. Untuk mengonfigurasi kumpulan pengguna Anda untuk mengirim `V2_0` peristiwa, pilih **versi peristiwa Pemicu** **Fitur dasar\$1kustomisasi token akses untuk identitas pengguna** saat Anda mengonfigurasi pemicu di konsol Amazon Cognito. Untuk menghasilkan `V3_0` acara, pilih ****Fitur dasar\$1kustomisasi token akses untuk identitas pengguna dan mesin****. Anda juga dapat mengatur nilai `LambdaVersion` dalam [LambdaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-LambdaConfig)parameter dalam permintaan [UpdateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)atau [CreateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)API. Versi acara satu, dua, dan tiga tersedia dalam paket fitur **Essentials** dan **Plus**. Operasi M2M untuk acara versi tiga memiliki struktur harga yang terpisah dari rumus pengguna aktif bulanan (MAU). Untuk informasi selengkapnya, lihat [Harga Amazon Cognito](https://aws.amazon.com/cognito/pricing/).

**catatan**  
Kumpulan pengguna yang beroperasi dengan opsi **fitur keamanan lanjutan** pada atau sebelum 22 November 2024 pukul 1800 GMT, dan yang tetap berada di tingkat fitur **Lite** memiliki akses ke versi acara satu dan dua dari pemicu pembuatan token pra. Kumpulan pengguna di tingkat lama ini *tanpa* fitur keamanan lanjutan memiliki akses ke acara versi satu. Versi tiga *hanya* tersedia di Essentials dan Plus.

## Referensi klaim dan cakupan
<a name="user-pool-lambda-pre-token-generation-excluded-claims"></a>

Amazon Cognito membatasi klaim dan cakupan yang dapat Anda tambahkan, modifikasi, atau tekan dalam token akses dan identitas. Tabel berikut menjelaskan klaim yang dapat dan tidak dapat diubah oleh fungsi Lambda, serta parameter peristiwa pemicu yang memengaruhi keberadaan atau nilai klaim.


| Klaim | Jenis token default | Dapat menambahkan? | Dapat memodifikasi? | Bisa menekan? | Parameter acara - menambah atau memodifikasi | Parameter acara - menekan | Jenis identitas | Versi acara | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Klaim apa pun yang tidak ada dalam skema token kumpulan pengguna | Tidak ada | Ya | Ya | N/A | claimsToAddOrOverride | claimsToSuppress | Pengguna, mesin [1](#cognito-pretoken-machine-ids-tier-note) | Semua [2](#cognito-pretoken-id-access-versions-note) | 
| scope | Akses | Ya | Ya | Ya | scopesToAdd | scopesToSuppress | Pengguna, mesin [1](#cognito-pretoken-machine-ids-tier-note) | v2\$10, v3\$10 | 
| cognito:groups | ID, Akses | Ya | Ya | Ya | groupsToOverride | claimsToSuppress | Pengguna | Semua [2](#cognito-pretoken-id-access-versions-note) | 
| cognito:preferred\$1role | ID | Ya | Ya | Ya | preferredRole | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Pengguna | Semua | 
| cognito:roles | ID | Ya | Ya | Ya | iamRolesToOverride | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Pengguna | Semua | 
| cognito:username | ID | Tidak | Tidak | Tidak | N/A | N/A | Pengguna | N/A | 
| Klaim lain dengan cognito: awalan | Tidak ada | Tidak | Tidak | Tidak | N/A | N/A | N/A | N/A | 
| username | Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna | v2\$10, v3\$10 | 
| sub | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna | N/A | 
| atribut OIDC standar | ID | Ya | Ya | Ya | claimsToAddOrOverride | claimsToSuppress | Pengguna | Semua | 
| custom:atribut | ID | Ya | Ya | Ya | claimsToAddOrOverride | claimsToSuppress | Pengguna | Semua | 
| dev:atribut | ID | Tidak | Tidak | Ya | N/A | claimsToSuppress | Pengguna | Semua | 
| identities | ID | Tidak | Tidak | Tidak | N/A | N/A | Pengguna | N/A | 
| aud[4](#cognito-pretoken-aud-note) | ID | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| client\$1id | Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| event\$1id | Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| device\$1key | Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna | N/A | 
| version | Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| acr | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| amr | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| at\$1hash | ID | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| auth\$1time | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| azp | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| exp | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| iat | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| iss | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| jti | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| nbf | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| nonce | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| origin\$1jti | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 
| token\$1use | ID, Akses | Tidak | Tidak | Tidak | N/A | N/A | Pengguna, mesin | N/A | 

1 Token akses untuk identitas mesin hanya tersedia dengan peristiwa input `v3_0` pemicu. Event versi tiga hanya tersedia di tingkatan fitur **Essentials** dan **Plus**. Kumpulan pengguna di tingkat **Lite** dapat menerima `v1_0` acara. Kumpulan pengguna di tingkat **Lite** dengan fitur keamanan tingkat lanjut dapat menerima `v1_0` dan `v2_0` acara.

2 Konfigurasikan pemicu pembuatan token pra Anda ke versi `v1_0` acara hanya `v2_0` untuk token ID, untuk ID dan token akses, `v3_0` untuk ID dan token akses dengan kemampuan untuk identitas mesin.

3 Untuk menekan `cognito:preferred_role` dan `cognito:roles` klaim, tambahkan `cognito:groups` ke`claimsToSuppress`.

4 Anda dapat menambahkan `aud` klaim untuk mengakses token, tetapi nilainya harus sesuai dengan ID klien aplikasi dari sesi saat ini. Anda dapat memperoleh ID klien dalam acara permintaan dari`event.callerContext.clientId`.

## Menyesuaikan token identitas
<a name="user-pool-lambda-pre-token-generation-idtoken"></a>

Dengan semua versi peristiwa pemicu Lambda pembuatan token pra, Anda dapat menyesuaikan konten token identitas (ID) dari kumpulan pengguna Anda. Token ID menyediakan atribut pengguna dari sumber identitas tepercaya untuk login ke web atau aplikasi seluler. Untuk informasi selengkapnya tentang token ID, lihat[Memahami token identitas (ID)](amazon-cognito-user-pools-using-the-id-token.md).

Penggunaan pemicu Lambda generasi pra token dengan token ID meliputi yang berikut ini.
+ Buat perubahan saat runtime ke peran IAM yang diminta pengguna Anda dari kumpulan identitas.
+ Tambahkan atribut pengguna dari sumber eksternal.
+ Tambahkan atau ganti nilai atribut pengguna yang ada.
+ Menekan pengungkapan atribut pengguna yang, karena cakupan resmi pengguna Anda dan akses baca ke atribut yang Anda berikan kepada klien aplikasi, akan diteruskan ke aplikasi Anda.

## Menyesuaikan token akses
<a name="user-pool-lambda-pre-token-generation-accesstoken"></a>

Dengan versi peristiwa dua dan tiga dari pemicu Lambda generasi pra token, Anda dapat menyesuaikan konten token akses dari kumpulan pengguna Anda. Token akses memberi wewenang kepada pengguna untuk mengambil informasi dari sumber daya yang dilindungi akses seperti operasi API resmi token Amazon Cognito dan pihak ketiga. APIs Untuk otorisasi machine-to-machine (M2M) dengan pemberian kredensi klien, Amazon Cognito hanya memanggil pemicu pembuatan token pra saat kumpulan pengguna Anda dikonfigurasi untuk peristiwa versi tiga (). `V3_0` Untuk informasi selengkapnya tentang token akses, lihat[Memahami token akses](amazon-cognito-user-pools-using-the-access-token.md).

Penggunaan pemicu Lambda generasi pra token dengan token akses meliputi yang berikut ini.
+ Tambahkan atau tekan cakupan dalam klaim. `scope` Misalnya, Anda dapat menambahkan cakupan ke token akses yang dihasilkan dari autentikasi API kumpulan pengguna Amazon Cognito, yang hanya menetapkan cakupan. `aws.cognito.signin.user.admin`
+ Ubah keanggotaan pengguna dalam grup kumpulan pengguna.
+ Tambahkan klaim yang belum ada di token akses Amazon Cognito.
+ Menekan pengungkapan klaim yang seharusnya diteruskan ke aplikasi Anda.

Untuk mendukung penyesuaian akses di kumpulan pengguna Anda, Anda harus mengonfigurasi kumpulan pengguna untuk menghasilkan versi terbaru dari permintaan pemicu. Perbarui kumpulan pengguna Anda seperti yang ditunjukkan dalam prosedur berikut.

------
#### [ Konsol Manajemen AWS ]

**Untuk mendukung kustomisasi token akses dalam pemicu Lambda generasi pra token**

1. Buka [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/home), lalu pilih Kumpulan **Pengguna**.

1. Pilih kolam pengguna yang ada dari daftar, atau [buat kolam pengguna](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Pilih menu **Ekstensi** dan temukan pemicu **Lambda**.

1. Tambahkan atau edit **pemicu pembuatan Pra token**.

1. Pilih fungsi Lambda di bawah fungsi **Tetapkan Lambda**. 

1. Pilih **versi acara Trigger** dari **fitur Dasar\$1kustomisasi token akses untuk identitas pengguna** atau **Fitur dasar\$1kustomisasi token akses untuk identitas pengguna dan mesin**. Pengaturan ini memperbarui parameter permintaan yang dikirimkan Amazon Cognito ke fungsi Anda untuk menyertakan bidang untuk penyesuaian token akses.

------
#### [ User pools API ]

**Untuk mendukung kustomisasi token akses dalam pemicu Lambda generasi pra token**

Buat permintaan [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)atau [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API. Anda harus menentukan nilai untuk semua parameter yang tidak ingin disetel ke nilai default. Untuk informasi selengkapnya, lihat [Memperbarui kumpulan pengguna dan konfigurasi klien aplikasi](cognito-user-pool-updating.md).

Sertakan konten berikut dalam `LambdaVersion` parameter permintaan Anda. `LambdaVersion`Nilai `V2_0` menyebabkan kumpulan pengguna Anda menambahkan parameter untuk, dan menerapkan perubahan pada, token akses. `LambdaVersion`Nilai `V3_0` menghasilkan peristiwa yang sama seperti`V2_0`, tetapi menyebabkan kumpulan pengguna Anda *juga* menerapkan perubahan pada token akses M2M. Untuk memanggil versi fungsi tertentu, gunakan ARN fungsi Lambda dengan versi fungsi sebagai nilai. `LambdaArn`

```
"PreTokenGenerationConfig": { 
   "LambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction",
   "LambdaVersion": "V3_0"
},
```

------

**Metadata klien untuk kredensi klien machine-to-machine (M2M)**  
Anda dapat meneruskan [metadata klien](cognito-user-pools-working-with-lambda-triggers.md#working-with-lambda-trigger-client-metadata) dalam permintaan M2M. Metadata klien adalah informasi tambahan dari lingkungan pengguna atau aplikasi yang dapat berkontribusi pada hasil. [Pemicu Lambda generasi pra token](#user-pool-lambda-pre-token-generation) Dalam operasi otentikasi dengan prinsipal pengguna, Anda dapat meneruskan metadata klien ke pemicu pembuatan token pra di badan [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)dan [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)permintaan API. Karena aplikasi melakukan aliran untuk pembuatan token akses untuk M2M dengan permintaan langsung ke[Titik akhir token](token-endpoint.md), mereka memiliki model yang berbeda. Di badan POST dari permintaan token untuk kredensional klien, teruskan `aws_client_metadata` parameter dengan objek metadata klien URL-encoded () ke string. `x-www-form-urlencoded` Untuk contoh permintaan, lihat[Kredensi klien dengan otorisasi dasarKredensi klien dengan otorisasi badan POST](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body). Berikut ini adalah contoh parameter yang melewati pasangan kunci-nilai. `{"environment": "dev", "language": "en-US"}`

```
aws_client_metadata=%7B%22environment%22%3A%20%22dev%22,%20%22language%22%3A%20%22en-US%22%7D
```

**Sumber daya lainnya**
+ [Cara menyesuaikan token akses di kumpulan pengguna Amazon Cognito](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

**Topics**
+ [Versi acara](#user-pool-lambda-pre-token-generation-event-versions)
+ [Referensi klaim dan cakupan](#user-pool-lambda-pre-token-generation-excluded-claims)
+ [Menyesuaikan token identitas](#user-pool-lambda-pre-token-generation-idtoken)
+ [Menyesuaikan token akses](#user-pool-lambda-pre-token-generation-accesstoken)
+ [Sumber pemicu Lambda generasi pra token](#user-pool-lambda-pre-token-generation-trigger-source)
+ [Parameter pemicu Lambda generasi pra token](#cognito-user-pools-lambda-trigger-syntax-pre-token-generation)
+ [Contoh peristiwa pemicu pra token versi dua: Menambahkan dan menekan klaim, cakupan, dan grup](#aws-lambda-triggers-pre-token-generation-example-version-2-overview)
+ [Contoh acara pembuatan pra token versi dua: Tambahkan klaim dengan objek kompleks](#aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects)
+ [Versi acara pembuatan token pra satu contoh: Tambahkan klaim baru dan tekan klaim yang ada](#aws-lambda-triggers-pre-token-generation-version-1-add-claim)
+ [Versi acara pembuatan pra token satu contoh: Ubah keanggotaan grup pengguna](#aws-lambda-triggers-pre-token-generation-version-1-change-group)

## Sumber pemicu Lambda generasi pra token
<a name="user-pool-lambda-pre-token-generation-trigger-source"></a>


| Nilai triggerSource | Peristiwa | 
| --- | --- | 
| TokenGeneration\$1HostedAuth | Dipanggil selama otentikasi dari halaman masuk masuk terkelola Amazon Cognito. | 
| TokenGeneration\$1Authentication | Dipanggil setelah alur autentikasi pengguna selesai. | 
| TokenGeneration\$1NewPasswordChallenge | Dipanggil setelah pengguna dibuat oleh admin. Alur ini dipanggil ketika pengguna harus mengubah kata sandi sementara. | 
| TokenGeneration\$1ClientCredentials | Dipanggil setelah hibah kredensi klien M2M. Kumpulan pengguna Anda hanya mengirimkan acara ini ketika versi acara AndaV3\$10. | 
| TokenGeneration\$1AuthenticateDevice | Dipanggil pada akhir autentikasi perangkat pengguna. | 
| TokenGeneration\$1RefreshTokens | Dipanggil saat pengguna mencoba menyegarkan identitas dan mengakses token. | 

## Parameter pemicu Lambda generasi pra token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation"></a>

Permintaan yang diteruskan Amazon Cognito ke fungsi Lambda ini adalah kombinasi dari parameter di bawah ini dan parameter [umum yang ditambahkan Amazon](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) Cognito ke semua permintaan. Saat Anda menambahkan pemicu Lambda generasi pra token ke kumpulan pengguna Anda, Anda dapat memilih versi pemicu. Versi ini menentukan apakah Amazon Cognito meneruskan permintaan ke fungsi Lambda Anda dengan parameter tambahan untuk kustomisasi token akses.

------
#### [ Version one ]

Token versi satu dapat mengatur keanggotaan grup, peran IAM, dan klaim baru dalam token ID. Penggantian keanggotaan grup juga berlaku untuk `cognito:groups` klaim dalam token akses.

```
{
    "request": {
        "userAttributes": {"string": "string"},
        "groupConfiguration": {
                "groupsToOverride": [
                    "string",
                    "string"
                ],
                "iamRolesToOverride": [
                    "string",
                    "string"
                ],
                "preferredRole": "string"
        },
        "clientMetadata": {"string": "string"}
    },
    "response": {
        "claimsOverrideDetails": {
            "claimsToAddOrOverride": {"string": "string"},
            "claimsToSuppress": [
                "string",
                "string"
            ],
            "groupOverrideDetails": {
                "groupsToOverride": [
                    "string",
                    "string"
                ],
                "iamRolesToOverride": [
                    "string",
                    "string"
                ],
                "preferredRole": "string"
            }
        }
    }
}
```

------
#### [ Versions two and three ]

Peristiwa permintaan versi dua dan tiga menambahkan bidang yang menyesuaikan token akses. Kumpulan pengguna menerapkan perubahan dari peristiwa versi tiga untuk mengakses token untuk identitas mesin. Versi ini juga menambahkan dukungan untuk tipe `claimsToOverride` data yang kompleks dalam objek respons. Fungsi Lambda Anda dapat mengembalikan jenis data berikut dalam nilai: `claimsToOverride`
+ String
+ Number
+ Boolean
+ Array string, angka, boolean, atau kombinasi dari semua ini
+ JSON

```
{
    "request": {
        "userAttributes": {
            "string": "string"
        },
        "scopes": ["string", "string"],
        "groupConfiguration": {
            "groupsToOverride": ["string", "string"],
            "iamRolesToOverride": ["string", "string"],
            "preferredRole": "string"
        },
        "clientMetadata": {
            "string": "string"
        }
    },
    "response": {
        "claimsAndScopeOverrideDetails": {
            "idTokenGeneration": {
                "claimsToAddOrOverride": {
                    "string": [accepted datatype]
                },
                "claimsToSuppress": ["string", "string"]
            },
            "accessTokenGeneration": {
                "claimsToAddOrOverride": {
                    "string": [accepted datatype]
                },
                "claimsToSuppress": ["string", "string"],
                "scopesToAdd": ["string", "string"],
                "scopesToSuppress": ["string", "string"]
            },
            "groupOverrideDetails": {
                "groupsToOverride": ["string", "string"],
                "iamRolesToOverride": ["string", "string"],
                "preferredRole": "string"
            }
        }
    }
}
```

------

### Parameter permintaan pembuatan pra token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-request"></a>


| Nama | Deskripsi | Versi acara pemicu minimum | 
| --- |--- |--- |
| userAttributes |  Atribut profil pengguna Anda di kumpulan pengguna Anda.  | 1 | 
| groupConfiguration |  Objek masukan yang berisi konfigurasi grup saat ini. Objek termasuk`groupsToOverride`,`iamRolesToOverride`, dan`preferredRole`.  | 1 | 
| groupsToOverride |  [Kelompok kumpulan pengguna](cognito-user-pools-user-groups.md#cognito-user-pools-user-groups.title) yang menjadi anggota pengguna Anda.  | 1 | 
| iamRolesToMengesampingkan |  Anda dapat mengaitkan grup kumpulan pengguna dengan peran AWS Identity and Access Management (IAM). Elemen ini adalah daftar semua peran IAM dari grup tempat pengguna Anda menjadi anggota.  | 1 | 
| preferredRole |  Anda dapat menetapkan [prioritas untuk grup](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups.title) kumpulan pengguna. Elemen ini berisi nama peran IAM dari grup dengan presendensi tertinggi dalam elemen. `groupsToOverride`  | 1 | 
| clientMetadata |  Satu atau beberapa pasangan nilai kunci yang dapat Anda tentukan dan berikan sebagai input khusus ke fungsi Lambda untuk pemicu pembuatan token pra. Untuk meneruskan data ini ke fungsi Lambda Anda, gunakan ClientMetadata parameter dalam operasi [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)dan [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Amazon Cognito tidak menyertakan data dari `ClientMetadata` parameter [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)dan operasi [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API dalam permintaan yang diteruskan ke fungsi pembuatan token pra.  | 1 | 
| cakupan |  Akses cakupan token. Cakupan yang ada dalam token akses adalah standar kumpulan pengguna dan cakupan kustom yang diminta pengguna, dan bahwa Anda mengizinkan klien aplikasi Anda untuk menerbitkan.  | 2 | 

### Parameter respons pembuatan pra token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-response"></a>


| Nama | Deskripsi | Versi acara pemicu minimum | 
| --- |--- |--- |
| claimsOverrideDetails | Sebuah wadah untuk semua elemen dalam peristiwa V1\$10 pemicu. | 1 | 
| claimsAndScopeOverrideDetails |  Sebuah wadah untuk semua elemen dalam peristiwa `V2_0` atau `V3_0` pemicu.  | 2 | 
| idTokenGeneration |  Klaim yang ingin Anda ganti, tambahkan, atau tekan di token ID pengguna Anda. Nilai kustomisasi token induk ke ID ini hanya muncul di acara versi 2 ke atas, tetapi elemen anak muncul di acara versi 1.  | 2 | 
| accessTokenGeneration |  Klaim dan cakupan yang ingin Anda timpa, tambahkan, atau tekan di token akses pengguna Anda. Induk ini untuk mengakses nilai kustomisasi token hanya muncul di acara versi 2 ke atas.  | 2 | 
| claimsToAddOrOverride |  Peta dari satu atau lebih klaim dan nilainya yang ingin Anda tambahkan atau modifikasi. Untuk klaim terkait grup, gunakan `groupOverrideDetails` sebagai gantinya. Dalam acara versi 2 dan di atas, elemen ini muncul di bawah keduanya `accessTokenGeneration` dan`idTokenGeneration`.  | 1 [*](#cognito-pretoken-complex-objects-note) | 
| claimsToSuppress |  Daftar klaim yang ingin Anda tekan oleh Amazon Cognito. Jika fungsi Anda menekan dan mengganti nilai klaim, Amazon Cognito akan menekan klaim tersebut. Dalam acara versi 2 dan di atas, elemen ini muncul di bawah keduanya `accessTokenGeneration` dan`idTokenGeneration`.  | 1 | 
| groupOverrideDetails |  Objek output yang berisi konfigurasi grup saat ini. Objek termasuk`groupsToOverride`,`iamRolesToOverride`, dan`preferredRole`. Fungsi Anda menggantikan `groupOverrideDetails` objek dengan objek yang Anda berikan. Jika Anda memberikan objek kosong atau null dalam respons, Amazon Cognito akan menekan grup. Untuk menjaga konfigurasi grup yang ada tetap sama, salin nilai `groupConfiguration` objek permintaan ke `groupOverrideDetails` objek dalam respons. Kemudian berikan kembali ke layanan. ID Amazon Cognito dan token akses keduanya berisi klaim. `cognito:groups` `groupOverrideDetails`Objek Anda menggantikan `cognito:groups` klaim dalam token akses dan token ID. Penggantian grup adalah satu-satunya perubahan pada token akses yang dapat dilakukan oleh peristiwa versi 1.  | 1 | 
| scopesToAdd |  Daftar cakupan yang ingin Anda tambahkan ke `scope` klaim di token akses pengguna Anda. Anda tidak dapat menambahkan nilai cakupan yang berisi satu atau beberapa karakter ruang kosong.  | 2 | 
| scopesToSuppress |  Daftar cakupan yang ingin Anda hapus dari `scope` klaim di token akses pengguna Anda.  | 2 | 

\$1 Respon objek untuk versi satu peristiwa dapat mengembalikan string. Objek respons ke versi dua dan tiga peristiwa dapat mengembalikan [objek yang kompleks](#user-pool-lambda-pre-token-generation-event-versions).

## Contoh peristiwa pemicu pra token versi dua: Menambahkan dan menekan klaim, cakupan, dan grup
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-overview"></a>

Contoh ini membuat modifikasi berikut pada token pengguna.

1. Menetapkan mereka `family_name` sebagai `Doe` dalam token ID.

1. Mencegah `email` dan `phone_number` klaim agar tidak muncul di token ID.

1. Menetapkan `cognito:roles` klaim token ID mereka ke`"arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB"`.

1. Menetapkan `cognito:preferred_role` klaim token ID mereka ke`arn:aws:iam::123456789012:role/sns_caller`.

1. Menambahkan cakupan`openid`,`email`, dan `solar-system-data/asteroids.add` ke token akses.

1. Menekan ruang lingkup `phone_number` dan `aws.cognito.signin.user.admin` dari token akses. Penghapusan `phone_number` mencegah pengambilan nomor telepon pengguna dari`userInfo`. Penghapusan `aws.cognito.signin.user.admin` mencegah permintaan API oleh pengguna untuk membaca dan memodifikasi profil mereka sendiri dengan API kumpulan pengguna Amazon Cognito.
**catatan**  
Penghapusan `phone_number` dari cakupan hanya mencegah pengambilan nomor telepon pengguna jika cakupan yang tersisa dalam token akses termasuk `openid` dan setidaknya satu ruang lingkup standar lagi. Untuk informasi selengkapnya, lihat [Tentang cakupan](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-scopes).

1. Menetapkan `cognito:groups` klaim ID dan token akses mereka ke`"new-group-A","new-group-B","new-group-C"`.

------
#### [ JavaScript ]

```
export const handler = function(event, context) {
  event.response = {
    "claimsAndScopeOverrideDetails": {
      "idTokenGeneration": {
        "claimsToAddOrOverride": {
          "family_name": "Doe"
        },
        "claimsToSuppress": [
          "email",
          "phone_number"
        ]
      },
      "accessTokenGeneration": {
        "scopesToAdd": [
          "openid",
          "email",
          "solar-system-data/asteroids.add"
        ],
        "scopesToSuppress": [
          "phone_number",
          "aws.cognito.signin.user.admin"
        ]
      },
      "groupOverrideDetails": {
        "groupsToOverride": [
          "new-group-A",
          "new-group-B",
          "new-group-C"
        ],
        "iamRolesToOverride": [
          "arn:aws:iam::123456789012:role/new_roleA",
          "arn:aws:iam::123456789012:role/new_roleB",
          "arn:aws:iam::123456789012:role/new_roleC"
        ],
        "preferredRole": "arn:aws:iam::123456789012:role/new_role",
      }
    }
  };
  // Return to Amazon Cognito
  context.done(null, event);
};
```

------

Amazon Cognito meneruskan informasi peristiwa ke fungsi Lambda Anda. Fungsi kemudian mengembalikan objek acara yang sama ke Amazon Cognito, dengan perubahan apa pun dalam respons. Di konsol Lambda, Anda dapat mengatur peristiwa pengujian dengan data yang relevan dengan pemicu Lambda Anda. Berikut ini adalah peristiwa pengujian untuk sampel kode ini:

------
#### [ JSON ]

```
{
    "version": "2",
    "triggerSource": "TokenGeneration_Authentication",
    "region": "us-east-1",
    "userPoolId": "us-east-1_EXAMPLE",
    "userName": "JaneDoe",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "request": {
        "userAttributes": {
            "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "cognito:user_status": "CONFIRMED",
            "email_verified": "true",
            "phone_number_verified": "true",
            "phone_number": "+12065551212",
            "family_name": "Zoe",
            "email": "Jane.Doe@example.com"
        },
        "groupConfiguration": {
            "groupsToOverride": ["group-1", "group-2", "group-3"],
            "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1", "arn:aws:iam::123456789012:role/sns_caller2", "arn:aws:iam::123456789012:role/sns_caller3"],
            "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller"]
        },
        "scopes": [
            "aws.cognito.signin.user.admin", "openid", "email", "phone"
        ]
    },
    "response": {
        "claimsAndScopeOverrideDetails": []
    }
}
```

------

## Contoh acara pembuatan pra token versi dua: Tambahkan klaim dengan objek kompleks
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects"></a>

Contoh ini membuat modifikasi berikut pada token pengguna.

1. Menambahkan klaim nomor, string, boolean, dan tipe JSON ke token ID. Ini adalah satu-satunya perubahan yang disediakan oleh peristiwa pemicu versi dua untuk token ID.

1. Menambahkan klaim nomor, string, boolean, dan tipe JSON ke token akses.

1. Menambahkan tiga cakupan ke token akses.

1. Menekan `email` klaim dalam ID dan token akses.

1. Menekan `aws.cognito.signin.user.admin` ruang lingkup dalam token akses.

------
#### [ JavaScript ]

```
export const handler = function(event, context) {

    var scopes = ["MyAPI.read", "MyAPI.write", "MyAPI.admin"]
    var claims = {}
    claims["aud"]= event.callerContext.clientId;
    claims["booleanTest"] = false;
    claims["longTest"] = 9223372036854775807;
    claims["exponentTest"] = 1.7976931348623157E308;
    claims["ArrayTest"] = ["test", 9223372036854775807, 1.7976931348623157E308, true];
    claims["longStringTest"] = "\{\
        \"first_json_block\": \{\
            \"key_A\": \"value_A\",\
            \"key_B\": \"value_B\"\
        \},\
        \"second_json_block\": \{\
            \"key_C\": \{\
                \"subkey_D\": [\
                    \"value_D\",\
                    \"value_E\"\
                ],\
                \"subkey_F\": \"value_F\"\
            \},\
            \"key_G\": \"value_G\"\
        \}\
    \}";
    claims["jsonTest"] = {
    	"first_json_block": {
    		"key_A": "value_A",
    		"key_B": "value_B"
    	},
    	"second_json_block": {
    		"key_C": {
    			"subkey_D": [
    				"value_D",
    				"value_E"
    			],
    			"subkey_F": "value_F"
    		},
    		"key_G": "value_G"
    	}
    };
    event.response = {
        "claimsAndScopeOverrideDetails": {
            "idTokenGeneration": {
                "claimsToAddOrOverride": claims,
                "claimsToSuppress": ["email"]
            },
            "accessTokenGeneration": {
                "claimsToAddOrOverride": claims,
                "claimsToSuppress": ["email"],
                "scopesToAdd": scopes,
                "scopesToSuppress": ["aws.cognito.signin.user.admin"]
            }
        }
    };
    console.info("EVENT response\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v, 2))
    console.info("EVENT response size\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v).length)
    // Return to Amazon Cognito
    context.done(null, event);
};
```

------

Amazon Cognito meneruskan informasi peristiwa ke fungsi Lambda Anda. Fungsi kemudian mengembalikan objek acara yang sama ke Amazon Cognito, dengan perubahan apa pun dalam respons. Di konsol Lambda, Anda dapat mengatur peristiwa pengujian dengan data yang relevan dengan pemicu Lambda Anda. Berikut ini adalah peristiwa pengujian untuk sampel kode ini:

------
#### [ JSON ]

```
{
    "version": "2",
    "triggerSource": "TokenGeneration_HostedAuth",
    "region": "us-west-2",
    "userPoolId": "us-west-2_EXAMPLE",
    "userName": "JaneDoe",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "request": {
        "userAttributes": {
            "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "cognito:user_status": "CONFIRMED"
            "email_verified": "true",
            "phone_number_verified": "true",
            "phone_number": "+12065551212",
            "email": "Jane.Doe@example.com"
        },
        "groupConfiguration": {
            "groupsToOverride": ["group-1", "group-2", "group-3"],
            "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1"],
            "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller1"]
        },
        "scopes": [
            "aws.cognito.signin.user.admin",
            "phone",
            "openid",
            "profile",
            "email"
        ]
    },
    "response": {
        "claimsAndScopeOverrideDetails": []
    }
}
```

------

## Versi acara pembuatan token pra satu contoh: Tambahkan klaim baru dan tekan klaim yang ada
<a name="aws-lambda-triggers-pre-token-generation-version-1-add-claim"></a>

Contoh ini menggunakan peristiwa pemicu versi 1 dengan fungsi Lambda pembuatan token pra untuk menambahkan klaim baru dan menekan klaim yang ada.

------
#### [ Node.js ]

```
const handler = async (event) => {
  event.response = {
    claimsOverrideDetails: {
      claimsToAddOrOverride: {
        my_first_attribute: "first_value",
        my_second_attribute: "second_value",
      },
      claimsToSuppress: ["email"],
    },
  };

  return event;
};

export { handler };
```

------

Amazon Cognito meneruskan informasi peristiwa ke fungsi Lambda Anda. Fungsi kemudian mengembalikan objek acara yang sama ke Amazon Cognito, dengan perubahan apa pun dalam respons. Di konsol Lambda, Anda dapat mengatur peristiwa pengujian dengan data yang relevan dengan pemicu Lambda Anda. Berikut ini adalah peristiwa pengujian untuk contoh kode ini: Karena contoh kode tidak memproses parameter permintaan apa pun, Anda dapat menggunakan peristiwa pengujian dengan permintaan kosong. Untuk informasi selengkapnya tentang parameter permintaan umum, lihat[Acara pemicu Lambda kumpulan pengguna](cognito-user-pools-working-with-lambda-triggers.md#cognito-user-pools-lambda-trigger-event-parameter-shared).

------
#### [ JSON ]

```
{
  "request": {},
  "response": {}
}
```

------

## Versi acara pembuatan pra token satu contoh: Ubah keanggotaan grup pengguna
<a name="aws-lambda-triggers-pre-token-generation-version-1-change-group"></a>

Contoh ini menggunakan peristiwa pemicu versi 1 dengan fungsi Lambda pembuatan token pra untuk memodifikasi keanggotaan grup pengguna.

------
#### [ Node.js ]

```
const handler = async (event) => {
  event.response = {
    claimsOverrideDetails: {
      groupOverrideDetails: {
        groupsToOverride: ["group-A", "group-B", "group-C"],
        iamRolesToOverride: [
          "arn:aws:iam::XXXXXXXXXXXX:role/sns_callerA",
          "arn:aws:iam::XXXXXXXXX:role/sns_callerB",
          "arn:aws:iam::XXXXXXXXXX:role/sns_callerC",
        ],
        preferredRole: "arn:aws:iam::XXXXXXXXXXX:role/sns_caller",
      },
    },
  };

  return event;
};

export { handler };
```

------

Amazon Cognito meneruskan informasi peristiwa ke fungsi Lambda Anda. Fungsi kemudian mengembalikan objek acara yang sama ke Amazon Cognito, dengan perubahan apa pun dalam respons. Di konsol Lambda, Anda dapat mengatur peristiwa pengujian dengan data yang relevan dengan pemicu Lambda Anda. Berikut ini adalah peristiwa pengujian untuk sampel kode ini:

------
#### [ JSON ]

```
{
  "request": {},
  "response": {}
}
```

------