2013-06-20 2 views
9

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?

+0

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

Répondre

10

Transforme le code est correct, j'utilisais la mauvaise clé: -/

Quoi qu'il en soit, j'espère que cela pourrait aider quelqu'un d'autre.

Questions connexes