Когда Facebook отправляет обновления в режиме реального времени, они включают X-Hub-Signature в заголовок HTTP. Согласно их документации, они используют SHA1 и секрет приложения в качестве ключа.
На основе похожего вопроса для С# я попытался проверить подпись следующим образом («тело» — это сообщение, отправленное facebook в теле запроса):
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);
Но переданная подпись всегда отличается от вычисляемой подписи.
Кто-нибудь может помочь решить проблему?
Charset.forName("UTF-8")
, так как секрет FB использует только символы Latin1 (ISO8859-1). - person jbrios777   schedule 31.08.2016