Skip to main content

Verifikasi Signature

Overview​

Tes Kepribadian menyediakan alur notifikasi melalui webhook yang dapat memberitahu Anda atas aktivitas berkaitan dengan data Tes Kepribadian Anda.

Sebagai upaya pengamanan untuk mencegah pesan webhook palsu yang dibuat oleh pihak tidak bertanggung jawab, kami menyisipkan signature pada setiap header pesan (X-SIGNATURE) yang kami kirim kepada alamat webhook Anda.

Demi keamanan bersama, mohon lakukan langkah berikut untuk melakukan verifikasi terhadap setiap pesan yang Anda terima.

Bagaimana cara kerja verifikasinya?​

Kami menggunakan Hash-based Message Authentication Code (HMAC) untuk Anda dapat memvalidasi setiap pesan yang kami kirimkan.

HMAC dikalkukasi secara simetris dengan menggunakan Client Secret dan fungsi hash SHA512. HMAC yang dihasilkan akan menjadi signature dari pesan webhook tersebut, yang kemudian dapat Anda gunakan untuk memvalidasi kebenaran dari pesan tersebut.

  1. Client Secret bisa Anda dapatkan melalui menu API dalam laman profil pada dashboard Tes Kepribadian Anda.
  2. Ketika mengirim sebuah pesan webhook, Tes Kepribadian akan menggunakan Client Secret tersebut dan algoritma HMAC-SHA512 untuk memproduksi sebuah hash dari isi pesan tersebut. Hash ini kemudian akan menjadi signature yang unik bagi pesan tersebut.
  3. Signature dikirim ke alamat webhook melalui header X-SIGNATURE.
  4. Ketika pesan webhook sampai di aplikasi Anda, aplikasi Anda akan membaca isi pesannya dan menggunakan Client Secret yang Anda miliki beserta algoritma HMAC-SHA512 untuk mengalkulasi signature-nya.
  5. Jika signature yang dikalkukasi pada aplikasi Anda sama dengan signature yang Anda terima pada header, maka dapat dikatakan bahwa pesan tersebut merupakan valid.

Komponen Signature​

HMAC-SHA512 digunakan untuk membuat pesan signature dalam pola tertentu dengan Client Secret Anda sebagai key.

Berikut contohnya dalam pseudo code. Dalam hal ini, nilai dari signature akan kemudian disisipkan ke dalam header X-SIGNATURE.

stringToSign = clientId + ":" + lowercase(sha256(minifyJson(requestBody)))
signature = base64(hmac_sha512(clientSecret, stringToSign))