2015-05-15 19 views
33

Ben Webhook for GitHub kodlama ediyorum maç ve aynı KOA.js güvenli doğrulama uygulamaya yok itme olayları olayları için x-hub-signature ve yükten hesaplanan karma eşleşmiyor, bu nedenle her zaman 403 yetkisiz hale gelir.Github itme olay imza

Güncelleme

I ve kaydedilmesini itme yükleri bu tür head_commit yük eklenir fark ettik. İşlemleri ve head_commit'i vücuttan kaldırmayı denedim ama işe yaramadı.

Güncelleme

fazla bilgi için bu örnek yükleri inceleyin. Ayrıca, Node JS crypto, cannot create hmac on chars with accents cevabında belirtildiği gibi, test repo ve belirteci bilgisi için URL'yi de dahil ettik: https://gist.github.com/marcoslhc/ec581f1a5ccdd80f8b33

+0

"Ne yazık ki başarısız" ne anlama geliyor? Ne hata (lar) alıyorsunuz? – Chris

+0

'x-hub-signature' hesaplanan karma değere eşit değil. – marcoslhc

+2

Karanlıkta toplam bir bıçak, ama 'this.request.body' zaten bir ip değil emin misin? Öyleyse, çift kodlu olacaktır (ör., Üç karakterli dizge foo, beş karakter dizgisi "foo" 'ya kodlanmış JSON olacaktır). This.request.body'nın ne tür yazdığını görün. – apsillers

cevap

10

default encoding of Crypto hash.update() is binary. Bu Hernández dört kez AKUT İLE karakteri U+00E1LATİN küçük a harfi içeren itme olay yük, bir soruna neden ve GitHub hizmetleri kodlanmış utf-8 olarak yük karma edilir. Gencinizin bunları ISO-8859-1'de yanlış kodlanmış olarak gösterdiğine dikkat edin, bu nedenle gelen karakter karakterini doğru şekilde kodladığınızdan da emin olun (ancak bu, varsayılan olarak yapılmalıdır).

Bir Buffer kullanmak için her ihtiyaç Bunu düzeltmek için:

hmac = crypto.createHmac('sha1', tok).update(new Buffer(blob, 'utf-8')).digest('hex'); 

... ya update doğrudan kodlamayı geçmesi:

hmac = crypto.createHmac('sha1', tok).update(blob, 'utf-8').digest('hex'); 

7f9e6014b7bddf5533494eff6a2c71c4ec7c042d doğru karma sonra hesaplanacaktır.

+1

Tamam. Denemek için gitmek :) Şimdi mükemmel anlamda mantıklı! – marcoslhc