Saya mencoba memverifikasi API Webhook Smartsheet setiap kali smartsheet membuat permintaan POST ke URL panggilan balik saya. Adakah yang pernah bekerja dengan ini sebelumnya?

Saya perlu memverifikasi bahwa permintaan POST berasal dari Smartsheet, setiap kali ada panggilan ke URL Panggilan Balik saya.

Mengikuti panduan di sini:

To authenticate a callback request:

1. Calculate the HMAC of the webhook's sharedSecret and the request body.
This must be done using the SHA-256 cryptographic hash algorithm.

2. Format the calculated value as a string in base 16.

3. Compare your result with the value of the Smartsheet-Hmac-SHA256 header of the request.

Saya menggunakan Javascript. Saya dapat menghasilkan hash. Saya mencoba beberapa pendekatan, tidak ada yang berhasil. Berdasarkan praktik terbaik dan dari apa yang pernah saya kerjakan sebelumnya, ini seharusnya berhasil:

crypto.createHash('sha256', sharedSecret).update(JSON.stringify(body)).digest('hex');

Tapi tidak, saya bahkan mencoba ini juga:

crypto.createHash('sha256').update(sharedSecret+JSON.stringify(body)).digest('hex');

Ini tidak bekerja.

Variabel body di sini berasal dari req.body, dari payload yang dikirim Smartsheet ke URL panggilan balik saya, dan sharedSecret adalah rahasia yang disediakan oleh Smartsheet saat saya membuat webhook.

0
samson ade 28 Februari 2020, 19:25

1 menjawab

Jawaban Terbaik

Saya akhirnya mengetahuinya. Saya menggunakan fungsi yang salah. Cara yang tepat untuk melakukannya adalah:

crypto.createHmac('sha256',sharedSecret).update(JSON.stringify(body)).digest('hex');

'hex' sama dengan base 16, menurut spec.

SharedSecret akan menjadi kuncinya, dan isi permintaan perlu diubah menjadi string agar berfungsi. Menjalankan kode ini menghasilkan string yang sama persis seperti yang kita miliki di: 'smartsheet-hmac-sha256', sehingga kita dapat membandingkan & memverifikasi.

0
samceena 28 Februari 2020, 18:31