Tentukan tantangan Auth pemicu Lambda - Amazon Cognito

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

Tentukan tantangan Auth pemicu Lambda

Pemicu Lambda tantangan
Menentukan tantangan autentikasi

Amazon Cognito memanggil pemicu ini untuk memulai alur autentikasi kustom.

Permintaan untuk pemicu Lambda ini berisi. session sessionParameter adalah array yang berisi semua tantangan yang disajikan kepada pengguna dalam proses otentikasi saat ini. Permintaan juga mencakup hasil yang sesuai. sessionArray menyimpan detail tantangan (ChallengeResult) dalam urutan kronologis. Tantangan tersebut session[0] merupakan tantangan pertama yang diterima pengguna.

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:

  1. Aplikasi Anda memulai proses masuk dengan memanggil InitiateAuth atau menggunakan AdminInitiateAuth peta. AuthParameters Parameter harus mencakup CHALLENGE_NAME: SRP_A, dan nilai untuk SRP_A danUSERNAME.

  2. Amazon Cognito memanggil pemicu Lambda tantangan autentikasi definisi Anda dengan sesi awal yang berisi dan. challengeName: SRP_A challengeResult: true

  3. Setelah menerima masukan tersebut, fungsi Lambda Anda merespons dengan challengeName: PASSWORD_VERIFIER, issueTokens: false, failAuthentication: false.

  4. Jika verifikasi kata sandi berhasil, Amazon Cognito memanggil fungsi Lambda Anda lagi dengan sesi baru yang berisi dan. challengeName: PASSWORD_VERIFIER challengeResult: true

  5. 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 peta AuthParameters termasuk CHALLENGE_NAME: CUSTOM_CHALLENGE.

  6. Putaran tantangan berulang sampai semua tantangan terjawab.

Tentukan parameter pemicu Lambda tantangan Auth

Permintaan yang diteruskan Amazon Cognito ke fungsi Lambda ini adalah kombinasi dari parameter di bawah ini dan parameter umum yang ditambahkan Amazon Cognito ke semua permintaan.

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "challengeName": "string", "issueTokens": boolean, "failAuthentication": boolean } }

Tentukan parameter permintaan tantangan Auth

Saat Amazon Cognito memanggil fungsi Lambda Anda, Amazon Cognito menyediakan parameter berikut:

userAttributes

Satu atau lebih pasangan nama-nilai yang mewakili atribut pengguna.

userNotFound

Boolean yang diisi Amazon Cognito PreventUserExistenceErrors saat disetel ENABLED untuk klien kumpulan pengguna Anda. Nilai true berarti bahwa id pengguna (nama pengguna, alamat email, dan detail lainnya) tidak cocok dengan pengguna yang ada. Bila PreventUserExistenceErrors disetel keENABLED, layanan tidak menginformasikan aplikasi pengguna yang tidak ada. Kami menyarankan agar fungsi Lambda Anda mempertahankan pengalaman pengguna yang sama dan memperhitungkan latensi. Dengan cara ini, pemanggil tidak dapat mendeteksi perilaku yang berbeda ketika pengguna ada atau tidak ada.

sesi

Array ChallengeResult elemen. Masing-masing berisi elemen-elemen berikut:

challengeName

Salah satu jenis tantangan berikut:CUSTOM_CHALLENGE,SRP_A,PASSWORD_VERIFIER,SMS_MFA, DEVICE_SRP_AUTH,DEVICE_PASSWORD_VERIFIER, atauADMIN_NO_SRP_AUTH.

Saat fungsi define auth challenge Anda mengeluarkan PASSWORD_VERIFIER tantangan bagi pengguna yang telah menyiapkan otentikasi multifaktor, Amazon Cognito menindaklanjutinya dengan sebuah tantangan. SMS_MFA Dalam fungsi Anda, sertakan penanganan untuk acara masukan dari SMS_MFA tantangan. Anda tidak perlu memanggil SMS_MFA tantangan dari fungsi define auth challenge Anda.

penting

Saat fungsi Anda menentukan apakah pengguna telah berhasil diautentikasi dan Anda harus mengeluarkannya token, selalu periksa challengeName fungsi define auth challenge Anda dan verifikasi apakah itu cocok dengan nilai yang diharapkan.

challengeResult

Atur ke true jika pengguna berhasil menyelesaikan tantangan, atau false untuk sebaliknya.

challengeMetadata

Nama Anda untuk tantangan kustom. Digunakan hanya jika challengeName adalah CUSTOM_CHALLENGE.

clientMetadata

Satu atau lebih pasangan nilai-kunci yang dapat Anda berikan sebagai masukan kustom ke fungsi Lambda yang Anda tentukan untuk pemicu menentukan tantangan autentikasi. Untuk meneruskan data ini ke fungsi Lambda Anda, Anda dapat menggunakan ClientMetadata parameter dalam operasi AdminRespondToAuthChallengedan RespondToAuthChallengeAPI. Permintaan yang memanggil fungsi define auth challenge tidak menyertakan data yang diteruskan dalam ClientMetadata parameter AdminInitiateAuthdan operasi InitiateAuthAPI.

Tentukan parameter respons tantangan Auth

Dalam respons, Anda dapat mengembalikan tahap berikutnya dari proses autentikasi.

challengeName

String yang berisi nama tantangan berikutnya. Jika Anda ingin menyajikan tantangan baru bagi pengguna Anda, tentukan nama tantangan di sini.

issueTokens

Jika Anda menentukan bahwa pengguna telah menyelesaikan tantangan otentikasi dengan cukup, atur ketrue. Jika pengguna belum cukup memenuhi tantangan, atur kefalse.

failAuthentication

Jika Anda ingin mengakhiri proses otentikasi saat ini, atur ketrue. Untuk melanjutkan proses otentikasi saat ini, atur kefalse.

Tentukan contoh tantangan Auth

Contoh ini mendefinisikan serangkaian tantangan untuk otentikasi dan mengeluarkan token hanya jika pengguna telah menyelesaikan semua tantangan dengan sukses.

Node.js
const handler = async (event) => { if ( event.request.session.length == 1 && event.request.session[0].challengeName == "SRP_A" ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "PASSWORD_VERIFIER"; } else if ( event.request.session.length == 2 && event.request.session[1].challengeName == "PASSWORD_VERIFIER" && event.request.session[1].challengeResult == true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length == 3 && event.request.session[2].challengeName == "CUSTOM_CHALLENGE" && event.request.session[2].challengeResult == true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length == 4 && event.request.session[3].challengeName == "CUSTOM_CHALLENGE" && event.request.session[3].challengeResult == true ) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; } return event; }; export { handler }