Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan PKCE dalam pemberian kode otorisasi
Amazon Cognito mendukung otentikasi Proof Key for Code Exchange (PKCE) dalam pemberian kode otorisasi. PKCE adalah perpanjangan dari pemberian kode otorisasi OAuth 2.0 untuk klien publik. PKCE menjaga terhadap penukaran kode otorisasi yang dicegat.
Bagaimana Amazon Cognito menggunakan PKCE
Untuk memulai otentikasi dengan PKCE, aplikasi Anda harus menghasilkan nilai string unik. String ini adalah pemverifikasi kode, nilai rahasia yang digunakan Amazon Cognito untuk membandingkan klien yang meminta pemberian otorisasi awal kepada klien yang menukar kode otorisasi dengan token.
Aplikasi Anda harus menerapkan hash SHA256 ke string verifikasi kode dan menyandikan hasilnya ke base64. Berikan string hash ke Otorisasi titik akhir sebagai code_challenge parameter di badan permintaan. Saat aplikasi Anda menukar kode otorisasi dengan token, itu harus menyertakan string verifikasi kode dalam teks biasa sebagai code_verifier parameter dalam badan permintaan ke. Titik akhir token Amazon Cognito melakukan operasi hash-and-encode 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.
Melaksanakan Aliran Hibah Otorisasi dengan PKCE
-
Buka Amazon Cognito konsol
. Jika diminta, masukkan AWS kredensi Anda. -
Pilih Kumpulan Pengguna.
-
Pilih kolam pengguna yang ada dari daftar, atau buat kolam pengguna. Jika Anda membuat kumpulan pengguna, Anda akan diminta untuk mengatur klien aplikasi dan mengonfigurasi login terkelola selama wizard.
-
Hasilkan string alfanumerik acak, biasanya pengidentifikasi unik universal (UUID), untuk membuat tantangan kode untuk PKCE. String ini adalah nilai
code_verifierparameter yang akan Anda kirimkan dalam permintaan Anda keTitik akhir token. -
Hash
code_verifierstring dengan algoritma SHA256. Enkode hasil operasi hashing ke base64. String ini adalah nilaicode_challengeparameter yang akan Anda kirimkan dalam permintaan Anda keOtorisasi titik akhir.PythonContoh berikut menghasilkan a
code_verifierdan menghitungcode_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 skrip:
code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH -
Selesaikan login terkelola dengan permintaan pemberian 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 -
Kumpulkan otorisasi
codedan 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.comContent-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 -
Tinjau tanggapannya. Ini akan berisi ID, akses, dan token penyegaran. Untuk informasi selengkapnya tentang menggunakan token kumpulan pengguna Amazon Cognito, lihatMemahami kumpulan pengguna token web JSON (JWT).