Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tantangan otentikasi khusus pemicu Lambda
Saat membuat alur autentikasi untuk kumpulan pengguna Amazon Cognito, Anda mungkin menemukan bahwa Anda ingin memperluas model autentikasi di luar alur bawaan. Salah satu kasus penggunaan umum untuk pemicu tantangan khusus adalah menerapkan pemeriksaan keamanan tambahan di luar nama pengguna, kata sandi, dan otentikasi multi-faktor (MFA). Tantangan khusus adalah pertanyaan dan respons apa pun yang dapat Anda hasilkan dalam bahasa pemrograman yang didukung Lambda. Misalnya, Anda mungkin ingin meminta pengguna untuk memecahkan CAPTCHA atau menjawab pertanyaan keamanan sebelum diizinkan untuk mengautentikasi. Kebutuhan potensial lainnya adalah berintegrasi dengan faktor atau perangkat otentikasi khusus. Atau Anda mungkin telah mengembangkan perangkat lunak yang mengautentikasi pengguna dengan kunci keamanan perangkat keras atau perangkat biometrik. Definisi keberhasilan otentikasi untuk tantangan khusus adalah jawaban apa pun yang diterima fungsi Lambda Anda sebagai benar: string tetap, misalnya, atau respons yang memuaskan dari API eksternal.
Anda dapat memulai otentikasi dengan tantangan khusus Anda dan mengontrol proses otentikasi sepenuhnya, atau Anda dapat melakukan otentikasi nama pengguna kata sandi sebelum aplikasi Anda menerima tantangan khusus Anda.
Tantangan otentikasi khusus pemicu Lambda:
- Mendefinisikan
-
Memulai urutan tantangan. Menentukan apakah Anda ingin memulai tantangan baru, menandai otentikasi sebagai selesai, atau menghentikan upaya otentikasi.
- Menciptakan
-
Mengeluarkan pertanyaan ke aplikasi Anda yang harus dijawab pengguna. Fungsi ini mungkin menyajikan pertanyaan keamanan atau tautan ke CAPTCHA yang harus ditampilkan aplikasi Anda kepada pengguna Anda.
- Memverifikasi
-
Mengetahui jawaban yang diharapkan dan membandingkannya dengan jawaban yang diberikan aplikasi Anda dalam respons tantangan. Fungsi ini mungkin memanggil API layanan CAPTCHA Anda untuk mengambil hasil yang diharapkan dari solusi yang dicoba pengguna Anda.
Ketiga fungsi Lambda ini berantai bersama untuk menghadirkan mekanisme otentikasi yang sepenuhnya berada dalam kendali Anda dan desain Anda sendiri. Karena otentikasi kustom memerlukan logika aplikasi di klien Anda dan dalam fungsi Lambda, Anda tidak dapat memproses otentikasi kustom dalam login terkelola. Sistem otentikasi ini membutuhkan upaya pengembang tambahan. Aplikasi Anda harus menjalankan alur otentikasi dengan API kumpulan pengguna dan menangani tantangan yang dihasilkan dengan antarmuka login yang dibuat khusus yang membuat pertanyaan di tengah tantangan otentikasi kustom.

Untuk informasi selengkapnya tentang menerapkan otentikasi kustom, lihat Alur otentikasi kustom dan tantangan
Otentikasi antara operasi API InitiateAuthatau AdminInitiateAuth, dan RespondToAuthChallengeatau AdminRespondToAuthChallenge. Dalam alur ini, pengguna mengautentikasi dengan menjawab tantangan berturut-turut sampai autentikasi gagal atau pengguna mengeluarkan token. Respons tantangan bisa menjadi tantangan baru. Dalam hal ini, aplikasi Anda merespons tantangan baru sebanyak yang diperlukan. Otentikasi yang berhasil terjadi ketika fungsi define auth challenge menganalisis hasil sejauh ini, menentukan semua tantangan telah dijawab, dan kembali. IssueTokens
Topik
Otentikasi SRP dalam alur tantangan khusus
Anda dapat meminta Amazon Cognito memverifikasi kata sandi pengguna sebelum mengeluarkan tantangan kustom Anda. Setiap pemicu Lambda yang terkait dalam kategori Otentikasi kuota tingkat permintaan akan berjalan saat Anda melakukan otentikasi SRP dalam alur tantangan khusus. Berikut adalah gambaran umum prosesnya:
-
Aplikasi Anda memulai proses masuk dengan memanggil
InitiateAuth
atau menggunakanAdminInitiateAuth
peta.AuthParameters
Parameter harus mencakupCHALLENGE_NAME: SRP_A,
dan nilai untukSRP_A
danUSERNAME
. -
Amazon Cognito memanggil pemicu Lambda tantangan autentikasi definisi Anda dengan sesi awal yang berisi dan.
challengeName: SRP_A
challengeResult: true
-
Setelah menerima masukan tersebut, fungsi Lambda Anda merespons dengan
challengeName: PASSWORD_VERIFIER
,issueTokens: false
,failAuthentication: false
. -
Jika verifikasi kata sandi berhasil, Amazon Cognito memanggil fungsi Lambda Anda lagi dengan sesi baru yang berisi dan.
challengeName: PASSWORD_VERIFIER
challengeResult: true
-
Untuk memulai tantangan kustom Anda, fungsi Lambda Anda merespons
challengeName: CUSTOM_CHALLENGE
denganissueTokens: false
,, dan.failAuthentication: false
Jika Anda tidak ingin memulai alur autentikasi kustom dengan verifikasi kata sandi, Anda dapat memulai masuk dengan petaAuthParameters
termasukCHALLENGE_NAME: CUSTOM_CHALLENGE
. -
Putaran tantangan berulang sampai semua tantangan terjawab.
Berikut ini adalah contoh InitiateAuth
permintaan awal yang mendahului otentikasi kustom dengan aliran SRP.
{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "1example23456789", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser", "SRP_A": "[SRP_A]", "SECRET_HASH": "[secret hash]" } }
Reset kata sandi dalam aliran SRP otentikasi khusus
Saat pengguna dalam FORCE_CHANGE_PASSWORD
status, alur otentikasi kustom Anda harus mengintegrasikan langkah perubahan kata sandi sambil mempertahankan integritas tantangan otentikasi Anda. Amazon Cognito memanggil pemicu Lambda tantangan autentikasi definisi Anda selama tantangan. NEW_PASSWORD_REQUIRED
Dalam skenario ini, pengguna yang masuk dengan alur tantangan khusus dan otentikasi SRP dapat menyetel kata sandi baru jika mereka berada dalam status pengaturan ulang kata sandi.
Ketika pengguna berada dalam FORCE_CHANGE_PASSWORD
status RESET_REQUIRED
atau, mereka harus menanggapi NEW_PASSWORD_REQUIRED
tantangan denganNEW_PASSWORD
. Dalam otentikasi khusus dengan SRP, Amazon Cognito mengembalikan NEW_PASSWORD_REQUIRED
tantangan setelah pengguna menyelesaikan tantangan SRP. PASSWORD_VERIFIER
Pemicu tantangan autentikasi definisi Anda menerima kedua hasil tantangan dalam session
larik, dan dapat melanjutkan dengan tantangan khusus tambahan setelah pengguna berhasil mengubah kata sandi mereka.
Tantangan autentikasi definisi Anda Pemicu Lambda harus mengelola urutan tantangan melalui otentikasi SRP, pengaturan ulang kata sandi, dan tantangan khusus berikutnya. Pemicu menerima serangkaian tantangan yang diselesaikan dalam session
parameter, termasuk keduanya PASSWORD_VERIFIER
dan NEW_PASSWORD_REQUIRED
hasil. Untuk contoh implementasi, lihatTentukan contoh tantangan Auth.
Langkah-langkah aliran otentikasi
Untuk pengguna yang perlu memverifikasi kata sandi mereka sebelum tantangan khusus, prosesnya mengikuti langkah-langkah berikut:
-
Aplikasi Anda memulai proses masuk dengan memanggil
InitiateAuth
atau menggunakanAdminInitiateAuth
peta.AuthParameters
Parameter harus mencakupCHALLENGE_NAME: SRP_A
, dan nilai untukSRP_A
danUSERNAME
. -
Amazon Cognito memanggil pemicu Lambda tantangan autentikasi definisi Anda dengan sesi awal yang berisi dan.
challengeName: SRP_A
challengeResult: true
-
Setelah menerima masukan tersebut, fungsi Lambda Anda merespons dengan
challengeName: PASSWORD_VERIFIER
,issueTokens: false
,failAuthentication: false
. -
Jika verifikasi kata sandi berhasil, salah satu dari dua hal terjadi:
- Untuk pengguna dalam status normal:
-
Amazon Cognito memanggil fungsi Lambda Anda lagi dengan sesi baru yang berisi dan.
challengeName: PASSWORD_VERIFIER
challengeResult: true
Untuk memulai tantangan kustom Anda, fungsi Lambda Anda merespons
challengeName: CUSTOM_CHALLENGE
denganissueTokens: false
,, dan.failAuthentication: false
- Untuk pengguna dalam
RESET_REQUIRED
atauFORCE_CHANGE_PASSWORD
status: -
Amazon Cognito memanggil fungsi Lambda Anda dengan sesi yang berisi dan.
challengeName: PASSWORD_VERIFIER
challengeResult: true
Fungsi Lambda Anda harus merespons dengan
challengeName: NEW_PASSWORD_REQUIRED
,issueTokens: false
, dan.failAuthentication: false
Setelah berhasil mengubah kata sandi, Amazon Cognito memanggil fungsi Lambda Anda dengan sesi yang berisi hasil dan hasil.
PASSWORD_VERIFIER
NEW_PASSWORD_REQUIRED
Untuk memulai tantangan kustom Anda, fungsi Lambda Anda merespons
challengeName: CUSTOM_CHALLENGE
denganissueTokens: false
,, dan.failAuthentication: false
-
Putaran tantangan berulang sampai semua tantangan terjawab.
Jika Anda tidak ingin memulai alur autentikasi kustom dengan verifikasi kata sandi, Anda dapat memulai masuk dengan peta AuthParameters
termasuk CHALLENGE_NAME: CUSTOM_CHALLENGE
.
Manajemen sesi
Alur otentikasi mempertahankan kontinuitas sesi melalui serangkaian sesi IDs dan hasil tantangan. Setiap respons tantangan menghasilkan ID sesi baru untuk mencegah kesalahan penggunaan kembali sesi, yang sangat penting untuk alur otentikasi multi-faktor.
Hasil tantangan disimpan secara kronologis dalam larik sesi yang diterima pemicu Lambda Anda. Untuk pengguna dalam FORCE_CHANGE_PASSWORD
status, larik sesi berisi:
session[0]
-SRP_A
Tantangan awalsession[1]
-PASSWORD_VERIFIER
hasilsession[2]
-NEW_PASSWORD_REQUIRED
hasilElemen selanjutnya - Hasil tantangan khusus tambahan
Contoh aliran otentikasi
Contoh berikut menunjukkan alur otentikasi kustom lengkap untuk pengguna dalam FORCE_CHANGE_PASSWORD
status yang harus menyelesaikan perubahan kata sandi dan tantangan CAPTCHA kustom.
-
InitiateAuth permintaan
{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "
1example23456789
", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser
", "SRP_A": "[SRP_A]
" } } -
InitiateAuth respon
{ "ChallengeName": "PASSWORD_VERIFIER", "ChallengeParameters": { "USER_ID_FOR_SRP": "
testuser
" }, "Session": "[session_id_1]
" } -
RespondToAuthChallenge permintaan dengan
PASSWORD_VERIFIER
{ "ChallengeName": "PASSWORD_VERIFIER", "ClientId": "
1example23456789
", "ChallengeResponses": { "PASSWORD_CLAIM_SIGNATURE": "[claim_signature]
", "PASSWORD_CLAIM_SECRET_BLOCK": "[secret_block]
", "TIMESTAMP": "[timestamp]
", "USERNAME": "testuser
" }, "Session": "[session_id_1]
" } -
RespondToAuthChallenge respon dengan
NEW_PASSWORD_REQUIRED
tantangan{ "ChallengeName": "NEW_PASSWORD_REQUIRED", "ChallengeParameters": {}, "Session": "
[session_id_2]
" } -
RespondToAuthChallenge permintaan dengan
NEW_PASSWORD_REQUIRED
{ "ChallengeName": "NEW_PASSWORD_REQUIRED", "ClientId": "
1example23456789
", "ChallengeResponses": { "NEW_PASSWORD": "[password]
", "USERNAME": "testuser
" }, "Session": "[session_id_2]
" } -
RespondToAuthChallenge respon dengan tantangan kustom CAPTCHA
{ "ChallengeName": "CUSTOM_CHALLENGE", "ChallengeParameters": { "captchaUrl": "url/123.jpg" }, "Session": "
[session_id_3]
" } -
RespondToAuthChallenge permintaan dengan jawaban untuk tantangan kustom CAPTCHA
{ "ChallengeName": "CUSTOM_CHALLENGE", "ClientId": "
1example23456789
", "ChallengeResponses": { "ANSWER": "123
", "USERNAME": "testuser
" }, "Session": "[session_id_3]
" }
6. Respon sukses akhir
{ "AuthenticationResult": { "AccessToken": "
eyJra456defEXAMPLE
", "ExpiresIn": 3600, "IdToken": "eyJra789ghiEXAMPLE
", "RefreshToken": "eyJjd123abcEXAMPLE
", "TokenType": "Bearer" }, "ChallengeParameters": {} }