Mengonfigurasi Autentikasi multi-faktor

Halaman ini menjelaskan cara mengonfigurasi Autentikasi multi-faktor (MFA) yang memungkinkan Anda memverifikasi identitas pengguna dengan mengirimkan kode verifikasi melalui email. Dengan fitur ini, Anda dapat memverifikasi bahwa pengguna Anda memiliki alamat email yang dikaitkan dengan akun mereka. MFA dapat membantu melindungi pengguna Anda dari serangan credential stuffing dan pengambilalihan akun (ATO).

MFA tersedia untuk kunci berbasis skor dan tidak tersedia untuk kunci kotak centang.

Memahami proses konfigurasi MFA

Fitur MFA reCAPTCHA diterapkan di atas alur kerja reCAPTCHA reguler.

Pada tingkat tinggi, alur kerja MFA adalah sebagai berikut:

  1. Instrumen alur kerja penting di situs Anda.
  2. Buat penilaian dengan menggunakan token yang ditampilkan oleh panggilan execute() dan parameter MFA untuk mendapatkan requestToken MFA.
  3. Memicu verifikasi multi-faktor dengan requestToken sesuai dengan saluran yang ingin Anda gunakan (hanya email yang didukung).
  4. Verifikasi PIN yang dimasukkan oleh pengguna akhir di situs Anda.
  5. Buat penilaian baru menggunakan token yang ditampilkan dalam permintaan verifikasi.

Sebelum memulai

  1. Siapkan lingkungan Anda untuk reCAPTCHA.

  2. MFA dapat diakses setelah peninjauan keamanan, yang dimulai saat Anda menambahkan akun penagihan ke project. Tambahkan akun penagihan untuk melakukan aktivasi situs Anda ke fitur ini.

  3. Jika Anda ingin mengaktifkan fitur verifikasi email MFA, lakukan langkah berikut:

    1. Di konsol Google Cloud, buka halaman reCAPTCHA.

      Buka reCAPTCHA

    2. Pastikan nama project Anda muncul di pemilih resource.

      Jika tidak melihat nama project, klik pemilih resource, lalu pilih project Anda.

    3. Klik Setelan.

    4. Di panel Multi Factor Authentication, klik Configure.

    5. Di dialog Configure MFA, lakukan hal berikut:

      1. Untuk mengaktifkan verifikasi email, klik tombol Aktifkan email.
      2. Di kotak Nama pengirim, masukkan nama Anda.
      3. Di kotak Email pengirim, masukkan alamat email Anda.

    6. Klik Simpan.

  4. Siapkan reCAPTCHA di situs Anda menggunakan kunci berbasis skor.

Menginstrumentasikan alur kerja penting di situs Anda

Teruskan informasi yang diperlukan ke reCAPTCHA melalui fungsi execute() untuk penilaian risiko. Fungsi execute() menampilkan promise yang diselesaikan setelah token dibuat.

Tambahkan parameter twofactor tambahan ke fungsi execute() seperti yang ditunjukkan dalam contoh kode berikut:

  grecaptcha.enterprise.execute(KEY_ID, {
    action: 'login',
    twofactor: true
  }).then(token => {
    // Handle the generated token.
  });

Ganti KEY_ID dengan kunci berbasis skor yang Anda buat untuk situs Anda.

Membuat penilaian

Dengan token yang dihasilkan oleh fungsi execute(), buat penilaian menggunakan Library Klien reCAPTCHA atau REST API dari backend Anda.

Dokumen ini menunjukkan cara membuat penilaian untuk MFA menggunakan REST API. Untuk mempelajari cara membuat penilaian menggunakan Library Klien, lihat Membuat penilaian untuk situs.

Sebelum membuat penilaian, lakukan hal berikut:

  • Siapkan autentikasi ke reCAPTCHA.

    Metode autentikasi yang Anda pilih bergantung pada lingkungan tempat reCAPTCHA disiapkan. Tabel berikut membantu Anda memilih metode autentikasi yang sesuai dan antarmuka yang didukung untuk menyiapkan autentikasi:

    Lingkungan Antarmuka Metode autentikasi
    Google Cloud
    • REST
    • Library klien
    Gunakan akun layanan terlampir.
    Lokal atau penyedia cloud lain REST Gunakan kunci API atau Workload identity federation.

    Jika Anda ingin menggunakan kunci API, sebaiknya amankan kunci API dengan menerapkan pembatasan kunci API.

    Library klien

    Gunakan resource berikut:

  • Pilih ID akun accountId yang stabil dan tidak sering diubah oleh pengguna dan berikan ke penilaian dalam metode projects.assessments.create. ID akun stabil ini harus memiliki nilai yang sama untuk semua peristiwa yang terkait dengan pengguna yang sama. Anda dapat memberikan hal berikut sebagai ID akun:

    ID pengguna

    Jika setiap akun dapat dikaitkan secara unik dengan nama pengguna, alamat email, atau nomor telepon yang stabil, Anda dapat menggunakannya sebagai accountId. Saat Anda memberikan ID lintas situs tersebut (ID yang dapat digunakan kembali di seluruh situs), reCAPTCHA menggunakan informasi ini untuk meningkatkan perlindungan bagi akun pengguna Anda berdasarkan model lintas situs dengan menandai ID akun yang melakukan penyalahgunaan dan menggunakan pengetahuan tentang pola penyalahgunaan lintas situs yang terkait dengan ID ini.

    Atau, jika Anda memiliki User-ID internal yang dikaitkan secara unik dengan setiap akun, Anda dapat memberikannya sebagai accountId.

    Di-hash atau dienkripsi

    Jika tidak memiliki ID pengguna internal yang secara unik dikaitkan dengan setiap akun, Anda dapat mengubah ID stabil menjadi ID akun spesifik per situs yang buram. ID ini masih diperlukan agar reCAPTCHA account defender dapat memahami pola aktivitas pengguna dan mendeteksi perilaku yang tidak normal, tetapi tidak dibagikan di situs lain.

    Pilih ID akun yang stabil dan buat buram sebelum dikirim ke reCAPTCHA dengan menggunakan enkripsi atau hashing:

    • enkripsi (direkomendasikan): mengenkripsi ID akun menggunakan metode enkripsi deterministik yang menghasilkan ciphertext yang stabil. Untuk petunjuk selengkapnya, lihat mengenkripsi data secara deterministik. Jika memilih enkripsi simetris daripada hashing, Anda tidak perlu menyimpan pemetaan antara ID pengguna dan ID pengguna buram yang sesuai. Dekripsi ID buram yang ditampilkan oleh reCAPTCHA untuk mengubahnya menjadi ID pengguna.

    • hashing: sebaiknya lakukan hashing pada ID akun menggunakan metode SHA256-HMAC dengan salt kustom pilihan Anda. Karena hash hanya bersifat satu arah, Anda perlu mempertahankan pemetaan antara hash yang dihasilkan dan ID pengguna agar dapat memetakan ID akun yang di-hash yang ditampilkan kembali ke akun asli.

Tambahkan parameter accountId dan endpoint, seperti alamat email untuk diverifikasi dalam penilaian di metode projects.assessments.create.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda.
  • TOKEN: token yang ditampilkan dari panggilan grecaptcha.enterprise.execute().
  • KEY_ID: kunci berbasis skor yang Anda instal di situs.
  • ACCOUNT_ID: ID untuk akun pengguna yang unik untuk situs Anda.
  • EMAIL_ID: alamat email yang permintaan verifikasinya perlu dipicu.

Metode HTTP dan URL:

POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments

Isi JSON permintaan:

{
  "event": {
    "token": "TOKEN",
    "siteKey": "KEY_ID",
    "userInfo": {
       "accountId": "ACCOUNT_ID"
    }
  }
  "accountVerification": {
    "endpoints": [{
      "emailAddress": "EMAIL_ID",
    }]
  }
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments"

PowerShell

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content

Anda akan melihat respons JSON seperti berikut:


{
  [...],
  "accountVerification": {
    "endpoints": [{
      "emailAddress": "foo@bar.com",
      "requestToken": "tplIUFvvJUIpLaOH0hIVj2H71t5Z9mDK2RhB1SAGSIUOgOIsBv",
      "lastVerificationTime": "",
    }],
    "latestVerificationResult": "RESULT_UNSPECIFIED"
  }
}

Penilaian ini berisi tanggal dan waktu verifikasi terbaru yang berhasil untuk endpoint tertentu di perangkat yang menerbitkan token, jika ada. File ini juga berisi satu kolom requestToken per endpoint, yang berisi string terenkripsi. Jika Anda memutuskan untuk memicu tantangan MFA untuk endpoint tersebut, Anda harus mengirim string terenkripsi ini kembali ke halaman web. Token permintaan berlaku selama 15 menit.

Jika Anda mengaktifkan reCAPTCHA account defender untuk project, respons penilaian akan berisi informasi terkait account defender selain informasi terkait MFA. Kolom recommended_action menampilkan kemungkinan tindakan yang dapat Anda lakukan sebelum memicu verifikasi multi-faktor.

Contoh berikut menunjukkan contoh penilaian yang menunjukkan lewati MFA sebagai tindakan yang direkomendasikan:

{
  [...],
  "accountDefenderAssessment": {
    labels: ["PROFILE_MATCH"],
    "recommended_action": "SKIP_2FA"
  }
}

Kolom recommended_action dapat memiliki salah satu nilai berikut:

Nilai Deskripsi
RECOMMENDED_ACTION_UNSPECIFIED Menunjukkan bahwa pelindung akun tidak dapat membuat penilaian untuk permintaan ini.
SKIP_2FA Menunjukkan bahwa pelindung akun menganggap aman untuk melewati MFA untuk penilaian ini. Hal ini biasanya berarti bahwa pengguna baru-baru ini diverifikasi untuk situs Anda di perangkat ini.
REQUEST_2FA Menunjukkan bahwa Anda memicu tantangan MFA untuk pengguna. Untuk informasi selengkapnya, lihat respons penilaian Account Defender.

Memicu verifikasi MFA di situs Anda

Untuk menantang pengguna berdasarkan informasi yang terdapat dalam penilaian, kirim requestToken MFA untuk endpoint yang ingin Anda verifikasi dari penilaian kembali ke halaman web.

Picu tantangan MFA dengan panggilan ke challengeAccount(). Fungsi challengeAccount() menampilkan promise yang diselesaikan setelah tantangan selesai, atau ditolak jika terjadi error atau waktu tunggu habis. Setelah selesai, token baru yang berisi informasi yang diperbarui akan dibuat, yang kemudian dikirim untuk penilaian.

Untuk memicu verifikasi multi-faktor, lakukan hal berikut:

  1. Uji integrasi MFA.

    Memicu tantangan MFA dengan panggilan ke challengeAccount() dengan memberikan nilai berikut:

    • KEY_ID: kunci berbasis skor yang Anda instal di situs.
    • REQUEST_TOKEN_FROM_ASSESSMENT: nilai kolom requestToken dari respons penilaian.
    • CONTAINER_HTML_COMPONENT_ID: ID komponen HTML tempat tantangan verifikasi harus dirender. Jika Anda tidak menentukan parameter ini, tantangan akan dirender dalam overlay di atas halaman.

    Contoh berikut menunjukkan cara memicu tantangan MFA dengan panggilan ke challengeAccount():

    grecaptcha.enterprise.challengeAccount(KEY_ID, {
      'account-token': REQUEST_TOKEN_FROM_ASSESSMENT,
      'container': CONTAINER_HTML_COMPONENT_ID
    }).then(newToken => {
      // Handle the new token.
    });
    

    Jika permintaan challengeAccount() berhasil, komponen HTML akan ditampilkan untuk memasukkan PIN yang diterima. Setelah PIN yang benar dimasukkan, variabel newToken diteruskan ke fungsi berantai yang berisi token verdict untuk diverifikasi melalui penilaian yang dibuat di backend.

  2. Buat nama sebutan verifikasi dan mulai tantangan dengan parameter berikut:

    // Initialize verification handle.
    const verificationHandle = grecaptcha.enterprise.eap.initTwoFactorVerificationHandle(
      KEY_ID,
      REQUEST_TOKEN_FROM_ASSESSMENT
    );
    
    // Call the challenge API.
    verificationHandle.challengeAccount().then(
      (challengeResponse) => {
        if (challengeResponse.isSuccess()) {
          // Handle success: This means displaying an input for the end user to
          // enter the PIN that they received and then call the `verifyAccount(pin)`
          // method.
        } else {
          // Handle API failure
        }
      });
    

Memverifikasi kode MFA dari halaman web

Setelah mendapatkan PIN dari pengguna akhir, Anda harus memvalidasi apakah PIN tersebut benar atau tidak.

Untuk memvalidasi PIN, panggil verificationHandle.verifyAccount() dengan PIN yang dimasukkan oleh pengguna akhir.

verificationHandle.verifyAccount(pin).then(
  (verifyResponse) => {
    if (verifyResponse.isSuccess()) {
      // Handle success: Send the result of `verifyResponse.getVerdictToken()`
      // to the backend in order to determine if the code was valid.
    } else {
      // Handle API failure
    }
  },
  (error) => {
    // Handle other errors
  }
);

Membuat penilaian baru

Buat penilaian baru dengan accountId dan endpoints. Untuk mengetahui petunjuknya, lihat membuat penilaian untuk MFA.

Setelah alur kerja selesai di klien, Anda akan menerima token baru yang dapat digunakan untuk mendapatkan verdict verifikasi yang Anda picu. Penilaian ini berisi stempel waktu terbaru terkait verifikasi terbaru yang berhasil, beserta status hasil berhasil.

Contoh berikut menunjukkan contoh penilaian yang Anda terima setelah membuat penilaian baru menggunakan token baru yang diperoleh dari situs:

{
  [...],
  "accountVerification": {
    "endpoints": [{
      "emailAddress": "foo@bar.com",
      "requestToken": "tplIUFvvJUIpLaOH0hIVj2H71t5Z9mDK2RhB1SAGSIUOgOIsBv",
      "lastVerificationTime": "2020-03-23 08:27:12 PST",
    }],
    "latestVerificationResult": "SUCCESS_USER_VERIFIED"
  }
}

Kolom latestVerificationResult dapat menampilkan status yang berbeda seperti yang tercantum dalam tabel berikut:

Status hasil verifikasi Deskripsi
SUCCESS_USER_VERIFIED Pengguna berhasil diverifikasi.
ERROR_USER_NOT_VERIFIED Pengguna gagal dalam tantangan verifikasi.
ERROR_SITE_ONBOARDING_INCOMPLETE Situs Anda tidak diaktivasi dengan benar untuk menggunakan fitur ini.
ERROR_RECIPIENT_NOT_ALLOWED Penerima ini tidak disetujui untuk menerima email (hanya selama pengujian).
ERROR_RECIPIENT_ABUSE_LIMIT_EXHAUSTED Penerima ini telah menerima terlalu banyak kode verifikasi dalam waktu singkat.
ERROR_CUSTOMER_QUOTA_EXHAUSTED Anda telah melampaui kuota MFA yang tersedia.
ERROR_CRITICAL_INTERNAL Verifikasi tidak selesai karena error internal dalam sistem kami.
RESULT_UNSPECIFIED Tidak ada informasi tentang verifikasi terbaru (belum pernah diverifikasi).

Langkah selanjutnya