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?
Nie musisz definiować 'Charset.forName (" UTF-8 ")', ponieważ tajny klucz FB używa tylko znaków Latin1 (ISO8859-1). – jbrios777