Membuat pemicu Lambda tantangan autentikasi - Amazon Cognito

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

Membuat pemicu Lambda tantangan autentikasi

Pemicu Lambda tantangan
Membuat tantangan autentikasi

Amazon Cognito memanggil pemicu ini setelah Menentukan Tantangan Autentikasi jika tantangan kustom telah ditetapkan sebagai bagian dari pemicu Menentukan Tantangan Autentikasi. Ini menciptakan alur autentikasi kustom.

Pemicu Lambda ini dipanggil untuk membuat tantangan untuk disajikan kepada pengguna. Permintaan untuk pemicu Lambda ini mencakup challengeName dan session. challengeName adalah string dan merupakan nama dari tantangan berikutnya untuk pengguna. Nilai dari atribut ini diatur dalam pemicu Lambda Menentukan Tantangan Autentikasi.

Putaran tantangan akan berulang sampai semua tantangan terjawab.

Membuat Parameter pemicu Lambda tantangan autentikasi

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", . . . }, "challengeName": "string", "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "publicChallengeParameters": { "string": "string", . . . }, "privateChallengeParameters": { "string": "string", . . . }, "challengeMetadata": "string" } }

Buat parameter permintaan tantangan Auth

userAttributes

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

userNotFound

Boolean ini diisi ketika PreventUserExistenceErrors diatur ke ENABLED untuk klien Kolam Pengguna Anda.

challengeName

Nama tantangan baru.

sesi

Elemen sesi adalah array elemen ChallengeResult, yang masing-masing berisi elemen berikut:

challengeName

Tipe tantangan. Salah satu dari: "CUSTOM_CHALLENGE", "PASSWORD_VERIFIER", "SMS_MFA", "DEVICE_SRP_AUTH", "DEVICE_PASSWORD_VERIFIER", atau "ADMIN_NO_SRP_AUTH".

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 membuat pemicu tantangan autentikasi. Anda dapat menggunakan ClientMetadata parameter dalam tindakan AdminRespondToAuthChallengedan RespondToAuthChallengeAPI untuk meneruskan data ini ke fungsi Lambda Anda. Permintaan yang memanggil fungsi create auth challenge tidak menyertakan data yang dilewatkan dalam ClientMetadata parameter dalam AdminInitiateAuthdan operasi InitiateAuthAPI.

Buat parameter respons tantangan Auth

publicChallengeParameters

Satu atau lebih pasangan nilai-kunci untuk digunakan oleh aplikasi klien dalam tantangan yang akan disajikan kepada pengguna. Parameter ini harus berisi semua informasi yang diperlukan untuk menyajikan tantangan kepada pengguna secara akurat.

privateChallengeParameters

Parameter ini hanya digunakan oleh pemicu Lambda Memverifikasi Respons Tantangan Autentikasi. Parameter ini harus berisi semua informasi yang diperlukan untuk memvalidasi respons pengguna terhadap tantangan. Dengan kata lain, parameter publicChallengeParameters berisi pertanyaan yang disajikan kepada pengguna dan privateChallengeParameters berisi jawaban yang valid untuk pertanyaan tersebut.

challengeMetadata

Nama Anda untuk tantangan kustom, jika ini adalah tantangan kustom.

Membuat Contoh Tantangan Autkasi

Sebuah CAPTCHA dibuat sebagai tantangan bagi pengguna. URL untuk gambar CAPTCHA ditambahkan ke parameter tantangan publik sebagai “captchaUrl”, dan jawaban yang diharapkan ditambahkan ke parameter tantangan privat.

Node.js
const handler = async (event) => { if (event.request.challengeName !== "CUSTOM_CHALLENGE") { return event; } if (event.request.session.length === 2) { event.response.publicChallengeParameters = {}; event.response.privateChallengeParameters = {}; event.response.publicChallengeParameters.captchaUrl = "url/123.jpg"; event.response.privateChallengeParameters.answer = "5"; } if (event.request.session.length === 3) { event.response.publicChallengeParameters = {}; event.response.privateChallengeParameters = {}; event.response.publicChallengeParameters.securityQuestion = "Who is your favorite team mascot?"; event.response.privateChallengeParameters.answer = "Peccy"; } return event; }; export { handler }