Tantangan otentikasi khusus pemicu Lambda - Amazon Cognito

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.

Pemicu Lambda tantangan

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

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:

  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.

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:

  1. Aplikasi Anda memulai proses masuk dengan memanggil InitiateAuth atau menggunakan AdminInitiateAuth peta. AuthParameters Parameter harus mencakupCHALLENGE_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, 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 atau FORCE_CHANGE_PASSWORD status:

    Amazon Cognito memanggil fungsi Lambda Anda dengan sesi yang berisi dan. challengeName: PASSWORD_VERIFIER challengeResult: true

    Fungsi Lambda Anda harus merespons denganchallengeName: 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

  5. 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:

  1. session[0]- SRP_A Tantangan awal

  2. session[1]- PASSWORD_VERIFIER hasil

  3. session[2]- NEW_PASSWORD_REQUIRED hasil

  4. Elemen 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.

  1. InitiateAuth permintaan

    { "AuthFlow": "CUSTOM_AUTH", "ClientId": "1example23456789", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser", "SRP_A": "[SRP_A]" } }
  2. InitiateAuth respon

    { "ChallengeName": "PASSWORD_VERIFIER", "ChallengeParameters": { "USER_ID_FOR_SRP": "testuser" }, "Session": "[session_id_1]" }
  3. 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]" }
  4. RespondToAuthChallenge respon dengan NEW_PASSWORD_REQUIRED tantangan

    { "ChallengeName": "NEW_PASSWORD_REQUIRED", "ChallengeParameters": {}, "Session": "[session_id_2]" }
  5. RespondToAuthChallenge permintaan dengan NEW_PASSWORD_REQUIRED

    { "ChallengeName": "NEW_PASSWORD_REQUIRED", "ClientId": "1example23456789", "ChallengeResponses": { "NEW_PASSWORD": "[password]", "USERNAME": "testuser" }, "Session": "[session_id_2]" }
  6. RespondToAuthChallenge respon dengan tantangan kustom CAPTCHA

    { "ChallengeName": "CUSTOM_CHALLENGE", "ChallengeParameters": { "captchaUrl": "url/123.jpg" }, "Session": "[session_id_3]" }
  7. 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": {} }