Lorsque Facebook envoie des mises à jour en temps réel, il inclut une signature X-Hub dans l'en-tête HTTP. Selon their documentation, ils utilisent SHA1 et le secret d'application comme clé.Facebook Mise à jour en temps réel: validation de la signature SHA1 de X-Hub-Signature en Java
Basé sur une similar question C# J'ai essayé de vérifier la signature comme celui-ci (« corps » est le message envoyé par Facebook dans le corps de la demande):
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);
Mais le passedSignature est toujours différent de la signature calculée.
Quelqu'un peut-il aider à résoudre le problème?
Vous n'avez pas besoin de définir 'Charset.forName (" UTF-8 ")' car le secret FB n'utilise que des caractères Latin1 (ISO8859-1). – jbrios777