

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

# Menggunakan PKCE dalam hibah kode otorisasi
<a name="using-pkce-in-authorization-code"></a>

Amazon Cognito mendukung otentikasi Kunci Bukti untuk Pertukaran Kode (PKCE) dalam hibah kode otorisasi. PKCE adalah perpanjangan dari hibah kode otorisasi OAuth 2.0 untuk klien publik. PKCE menjaga terhadap penebusan kode otorisasi yang dicegat.

## Bagaimana Amazon Cognito menggunakan PKCE
<a name="how-pkce-works"></a>

Untuk memulai otentikasi dengan PKCE, aplikasi Anda harus menghasilkan nilai string yang unik. String ini adalah pemverifikasi kode, nilai rahasia yang digunakan Amazon Cognito untuk membandingkan klien yang meminta hibah otorisasi awal kepada klien yang menukar kode otorisasi dengan token. 

Aplikasi Anda harus menerapkan SHA256 hash ke string pemverifikasi kode dan menyandikan hasilnya ke base64. Berikan string hash ke `code_challenge` parameter [Otorisasi titik akhir](authorization-endpoint.md) as a di badan permintaan. Saat aplikasi Anda menukar kode otorisasi dengan token, kode tersebut harus menyertakan string pemverifikasi kode dalam teks biasa sebagai `code_verifier` parameter di badan permintaan ke file. [Titik akhir token](token-endpoint.md) Amazon Cognito melakukan hash-and-encode operasi yang sama pada pemverifikasi kode. Amazon Cognito hanya mengembalikan ID, akses, dan token penyegaran jika menentukan bahwa pemverifikasi kode menghasilkan tantangan kode yang sama dengan yang diterimanya dalam permintaan otorisasi.

**Menerapkan Alur Hibah Otorisasi dengan PKCE**

1. Buka Amazon Cognito [konsol](https://console.aws.amazon.com/cognito/home). Jika diminta, masukkan AWS kredensil Anda.

1. Pilih **Kolam Pengguna**.

1. Pilih kolam pengguna yang ada dari daftar, atau buat kolam pengguna. Jika Anda membuat kumpulan pengguna, Anda akan diminta untuk menyiapkan klien aplikasi dan mengonfigurasi login terkelola selama wizard.

   1. Jika Anda membuat kumpulan pengguna baru, siapkan klien aplikasi dan konfigurasikan login terkelola selama penyiapan terpandu.

   1. Jika Anda mengonfigurasi kumpulan pengguna yang ada, tambahkan [domain](cognito-user-pools-assign-domain.md) dan [klien aplikasi publik](user-pool-settings-client-apps.md), jika Anda belum melakukannya.

1. Hasilkan string alfanumerik acak, biasanya pengidentifikasi unik universal ([UUID](cognito-terms.md#terms-uuid)), untuk membuat tantangan kode untuk PKCE. String ini adalah nilai `code_verifier` parameter yang akan Anda kirimkan dalam permintaan Anda ke[Titik akhir token](token-endpoint.md). 

1. Hash `code_verifier` string dengan SHA256 algoritma. Encode hasil operasi hashing ke base64. String ini adalah nilai `code_challenge` parameter yang akan Anda kirimkan dalam permintaan Anda ke[Otorisasi titik akhir](authorization-endpoint.md). 

   PythonContoh berikut menghasilkan `code_verifier` dan menghitung: `code_challenge`

   ```
   #!/usr/bin/env python3
   
   import secrets
   from base64 import urlsafe_b64encode
   from hashlib import sha256
   from string import ascii_letters
   from string import digits
   
   # use the secrets module for cryptographically strong random values
   alphabet = ascii_letters + digits
   code_verifier = ''.join(secrets.choice(alphabet) for _ in range(128))
   code_verifier_hash = sha256(code_verifier.encode()).digest()
   code_challenge = urlsafe_b64encode(code_verifier_hash).decode().rstrip('=')
   
   print(f"code challenge: {code_challenge}")
   print(f"code verifier: {code_verifier}")
   ```

   Berikut ini adalah contoh output dari Python script:

   ```
   code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg
   code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
   ```

1. Selesaikan login login terkelola dengan permintaan hibah kode otorisasi dengan PKCE. Berikut ini adalah contoh URL:

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&code_challenge=Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg&code_challenge_method=S256
   ```

1. Kumpulkan otorisasi `code` dan tukarkan dengan token dengan titik akhir token. Berikut ini adalah contoh permintaan:

   ```
   POST /oauth2/token HTTP/1.1
   Host: mydomain.auth.us-east-1.amazoncognito.com
   Content-Type: application/x-www-form-urlencoded
   Content-Length: 296
   
   redirect_uri=https%3A%2F%2Fwww.example.com&
   client_id=1example23456789&
   code=7378f445-c87f-400c-855e-0297d072ff03&
   grant_type=authorization_code&
   code_verifier=9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
   ```

1. Tinjau tanggapannya. Ini akan berisi ID, akses, dan token penyegaran. Untuk informasi selengkapnya tentang penggunaan token kumpulan pengguna Amazon Cognito, lihat. [Memahami kumpulan pengguna token web JSON () JWTs](amazon-cognito-user-pools-using-tokens-with-identity-providers.md)