Mengelola respons kesalahan keberadaan pengguna - Amazon Cognito

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

Mengelola respons kesalahan keberadaan pengguna

Amazon Cognito mendukung penyesuaian respons kesalahan yang dikembalikan oleh kumpulan pengguna. Respons kesalahan khusus tersedia untuk pembuatan dan otentikasi pengguna, pemulihan kata sandi, dan operasi konfirmasi.

Gunakan pengaturan PreventUserExistenceErrors dari klien aplikasi kolam pengguna untuk mengaktifkan atau menonaktifkan keberadaan pengguna terkait kesalahan. Saat Anda membuat klien aplikasi baru dengan API kumpulan pengguna Amazon Cognito, akan, PreventUserExistenceErrors atau dinonaktifkanLEGACY, secara default. Di konsol Amazon Cognito, opsi Cegah kesalahan keberadaan pengguna —setelan ENABLED untuk PreventUserExistenceErrors —dipilih secara default. Untuk memperbarui PreventUserExistenceErrors konfigurasi Anda, lakukan salah satu hal berikut:

  • Mengubah nilai PreventUserExistenceErrors antara ENABLED dan LEGACY dalam UpdateUserPoolClientPermintaan API.

  • Edit klien aplikasi Anda di konsol Amazon Cognito dan ubah status Cegah kesalahan keberadaan pengguna antara selected (ENABLED) dan deselected (). LEGACY

Jika properti ini memiliki nilaiLEGACY, klien aplikasi Anda akan menampilkan respons UserNotFoundException kesalahan saat pengguna mencoba masuk dengan nama pengguna yang tidak ada di kumpulan pengguna Anda.

Jika properti ini memiliki nilaiENABLED, klien aplikasi Anda tidak mengungkapkan tidak adanya akun pengguna di kumpulan pengguna Anda dengan UserNotFoundException kesalahan. PreventUserExistenceErrorsKonfigurasi ENABLED memiliki efek sebagai berikut:

  • Amazon Cognito merespons dengan informasi nonspesifik terhadap permintaan API di mana tanggapannya mungkin mengungkapkan bahwa ada pengguna yang valid.

  • Masuk Amazon Cognito dan lupa kata sandi APIs mengembalikan respons kegagalan otentikasi umum. Respons kesalahan memberitahu Anda nama pengguna atau kata sandi salah.

  • Konfirmasi akun Amazon Cognito dan pemulihan kata sandi APIs mengembalikan respons yang menunjukkan kode dikirim ke media pengiriman simulasi, bukan representasi sebagian dari informasi kontak pengguna.

Informasi berikut merinci perilaku operasi kumpulan pengguna saat PreventUserExistenceErrors disetel keENABLED.

Operasi otentikasi dan pembuatan pengguna

Anda dapat mengonfigurasi respons kesalahan dalam autentikasi Username-Password dan Secure Remote Password (SRP). Anda juga dapat menyesuaikan kesalahan yang Anda kembalikan dengan otentikasi khusus. Berikut ini APIs melakukan operasi otentikasi ini:

  • AdminInitiateAuth

  • AdminRespondToAuthChallenge

  • InitiateAuth

  • RespondToAuthChallenge

Daftar berikut menunjukkan bagaimana Anda dapat menyesuaikan respons kesalahan dalam operasi otentikasi pengguna.

Otentikasi nama pengguna dan kata sandi

Untuk menandatangani pengguna dengan ADMIN_USER_PASSWORD_AUTH danUSER_PASSWORD_AUTH, sertakan nama pengguna dan kata sandi dalam permintaan AdminInitiateAuth atau InitiateAuth API. Amazon Cognito mengembalikan NotAuthorizedException kesalahan umum ketika nama pengguna atau kata sandi salah.

Autentikasi berbasis Secure Remote Password (SRP)

Sebagai praktik terbaik, terapkan hanya PreventUserExistenceErrors dengan otentikasi SRP di kumpulan pengguna tanpa alamat email, nomor telepon, atau atribut alias nama pengguna pilihan. Pengguna dengan atribut alias mungkin tidak tunduk pada penekanan keberadaan pengguna dalam alur otentikasi SRP. Otentikasi Username-password sepenuhnya menekan keberadaan pengguna dari atribut alias.

Untuk menandatangani penggunaUSER_SRP_AUTH, sertakan nama pengguna dan SRP_A parameter dalam permintaan AdminInitiateAuth atau InitiateAuth API. Sebagai tanggapan, Amazon Cognito kembali SRP_B dan garam untuk pengguna. Ketika pengguna tidak ditemukan, Amazon Cognito mengembalikan respons yang disimulasikan pada langkah pertama seperti yang dijelaskan di RFC 5054. Amazon Cognito mengembalikan garam yang sama dan ID pengguna internal dalam format UUID untuk kombinasi nama pengguna dan kumpulan pengguna yang sama. Saat Anda mengirim permintaan RespondToAuthChallenge API dengan bukti kata sandi, Amazon Cognito mengembalikan NotAuthorizedException kesalahan umum ketika nama pengguna atau kata sandi salah.

Tantangan Autentikasi Kustom pemicu Lambda

Jika Anda menggunakan Pemicu Lambda Tantangan Otentikasi Kustom dan Anda mengaktifkan respons kesalahan, LambdaChallenge maka mengembalikan parameter Boolean bernama. UserNotFound Kemudian diteruskan dalam permintaan DefineAuthChallenge, VerifyAuthChallenge, dan pemicu Lambda CreateAuthChallenge. Anda dapat menggunakan pemicu ini untuk mensimulasikan tantangan otorisasi kustom untuk pengguna yang tidak ada. Jika Anda memanggil pemicu Pra-Autentikasi Lambda untuk pengguna yang tidak ada, maka Amazon Cognito mengembalikan UserNotFound.

Daftar berikut menunjukkan bagaimana Anda dapat menyesuaikan respons kesalahan dalam operasi pembuatan pengguna.

SignUp

SignUpOperasi selalu kembali UsernameExistsException ketika nama pengguna sudah diambil. Jika Anda tidak ingin Amazon Cognito menampilkan UsernameExistsException kesalahan untuk alamat email dan nomor telepon saat mendaftar pengguna di aplikasi, gunakan atribut alias berbasis verifikasi. Untuk informasi selengkapnya tentang alias, lihatMenyesuaikan atribut masuk.

Untuk contoh bagaimana Amazon Cognito dapat mencegah penggunaan permintaan SignUp API untuk menemukan pengguna di kumpulan pengguna Anda, lihat. Mencegah UsernameExistsException kesalahan untuk alamat email dan nomor telepon saat mendaftar

Mengimpor pengguna

Jika PreventUserExistenceErrors diaktifkan, selama otentikasi pengguna yang diimpor, NotAuthorizedException kesalahan umum dikembalikan yang menunjukkan nama pengguna atau kata sandi salah alih-alih kembali. PasswordResetRequiredException Lihat Membutuhkan pengguna yang diimpor untuk mengatur ulang kata sandi untuk informasi selengkapnya.

Memigrasi pengguna pemicu Lambda

Amazon Cognito mengembalikan respons yang disimulasikan untuk pengguna yang tidak ada ketika respons kosong diatur dalam konteks peristiwa asli oleh pemicu Lambda. Untuk informasi selengkapnya, lihat Migrasi PenggunaPpemicu Lambda.

Mencegah UsernameExistsException kesalahan untuk alamat email dan nomor telepon saat mendaftar

Contoh berikut menunjukkan bagaimana, ketika Anda mengonfigurasi atribut alias di kumpulan pengguna, Anda dapat menyimpan duplikat alamat email dan nomor telepon agar tidak menghasilkan UsernameExistsException kesalahan dalam menanggapi SignUp permintaan API. Anda harus telah membuat kumpulan pengguna Anda dengan alamat email atau nomor telepon sebagai atribut alias. Untuk informasi selengkapnya, lihat bagian Menyesuaikan atribut masuk dari atribut kumpulan pengguna.

  1. Jie mendaftar untuk nama pengguna baru, dan juga memberikan alamat jie@example.com email. Amazon Cognito mengirimkan kode ke alamat email mereka.

    Contoh AWS CLI perintah

    aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password PASSWORD --user-attributes Name="email",Value="jie@example.com"

    Contoh respon

    { "UserConfirmed": false, "UserSub": "<subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  2. Jie memberikan kode yang dikirim kepada mereka untuk mengonfirmasi kepemilikan mereka atas alamat email tersebut. Ini melengkapi pendaftaran mereka sebagai pengguna.

    Contoh AWS CLI perintah

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
  3. Shirley mendaftarkan akun pengguna baru dan memberikan alamat email. jie@example.com Amazon Cognito tidak mengembalikan UsernameExistsException kesalahan, dan mengirimkan kode konfirmasi ke alamat email Jie.

    Contoh AWS CLI perintah

    aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password PASSWORD --user-attributes Name="email",Value="jie@example.com"

    Contoh respon

    { "UserConfirmed": false, "UserSub": "<new subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  4. Dalam skenario yang berbeda, Shirley memiliki kepemilikan. jie@example.com Shirley mengambil kode yang dikirim Amazon Cognito ke alamat email Jie dan mencoba mengonfirmasi akun tersebut.

    Contoh AWS CLI perintah

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley --confirmation-code xxxxxx

    Contoh respon

    An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.

Amazon Cognito tidak mengembalikan kesalahan pada aws cognito-idp sign-up permintaan Shirley, meskipun telah ditetapkan ke pengguna jie@example.com yang sudah ada. Shirley harus menunjukkan kepemilikan alamat email sebelum Amazon Cognito mengembalikan respons kesalahan. Dalam kumpulan pengguna dengan atribut alias, perilaku ini mencegah penggunaan SignUp API publik untuk memeriksa apakah ada pengguna dengan alamat email atau nomor telepon tertentu.

Perilaku ini berbeda dengan respons yang dikembalikan Amazon Cognito ke SignUp permintaan dengan nama pengguna yang ada, seperti yang ditunjukkan pada contoh berikut. Sementara Shirley belajar dari tanggapan ini bahwa pengguna sudah ada dengan nama penggunajie, mereka tidak belajar tentang alamat email atau nomor telepon yang terkait dengan pengguna.

Contoh perintah CLI

aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD --user-attributes Name="email",Value="shirley@example.com"

Contoh respon

An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists

Operasi reset kata sandi

Amazon Cognito mengembalikan respons berikut ke operasi pengaturan ulang kata sandi pengguna saat Anda mencegah kesalahan keberadaan pengguna.

ForgotPassword

Ketika pengguna tidak ditemukan, dinonaktifkan, atau tidak memiliki mekanisme pengiriman terverifikasi untuk memulihkan kata sandi mereka, Amazon Cognito CodeDeliveryDetails kembali dengan media pengiriman simulasi untuk pengguna. Media pengiriman simulasi ditentukan oleh format nama pengguna input dan pengaturan verifikasi kumpulan pengguna.

ConfirmForgotPassword

Amazon Cognito mengembalikan kesalahan CodeMismatchException untuk pengguna yang tidak ada atau dinonaktifkan. Jika kode tidak diminta saat menggunakan ForgotPassword, Amazon Cognito mengembalikan kesalahan ExpiredCodeException.

Operasi konfirmasi

Amazon Cognito mengembalikan tanggapan berikut untuk konfirmasi pengguna dan operasi verifikasi saat Anda mencegah kesalahan keberadaan pengguna.

ResendConfirmationCode

Amazon Cognito mengembalikan kesalahan CodeDeliveryDetails untuk pengguna yang dinonaktifkan atau pengguna yang tidak ada. Amazon Cognito mengirimkan kode konfirmasi ke email atau nomor telepon pengguna yang sudah ada.

ConfirmSignUp

ExpiredCodeException akan kembali jika kode telah kedaluwarsa. Amazon Cognito mengembalikan NotAuthorizedException saat pengguna tidak diotorisasi. Jika kode tidak sesuai dengan apa yang diharapkan server, Amazon Cognito mengembalikan CodeMismatchException.