2013-06-20 12 views
9

Gdy Facebook wysyła aktualizacje w czasie rzeczywistym, zawierają podpis X-Hub w nagłówku HTTP. Według their documentation używają SHA1 i tajnego klucza aplikacji jako klucza.Aktualizacja w czasie rzeczywistym na Facebooku: Sprawdzanie poprawności podpisu X-Hub podpisu SHA1 w Javie

Na podstawie similar question dla C# próbowałem zweryfikować podpis tak („ciała” to wiadomość wysłana przez facebook w treści wniosku):

String passedSignature = req.getHeader("X-Hub-Signature").substring(5); 
Mac hmac = Mac.getInstance("HmacSHA1"); 
hmac.init(new SecretKeySpec(FACEBOOK_SECRET.getBytes(Charset.forName("UTF-8")), "HmacSHA1")); 
String calculatedSignature = Hex.encodeHexString(hmac.doFinal(body.getBytes(Charset.forName("UTF-8")))); 
logger.debug("Calculated sigSHA1: " + calculatedSignature + " passedSignature: " + passedSignature); 

Ale passedSignature jest zawsze różny od the calculateSignature.

Ktoś może pomóc w rozwiązaniu problemu?

+0

Nie musisz definiować 'Charset.forName (" UTF-8 ")', ponieważ tajny klucz FB używa tylko znaków Latin1 (ISO8859-1). – jbrios777

Odpowiedz

10

Okazuje się, że kod jest poprawny, byłem przy użyciu niewłaściwego klucza: -/

W każdym razie mam nadzieję, że to może pomóc kogoś innego.