2013-06-20 13 views
9

Wenn Facebook Echtzeit-Updates sendet, enthalten diese eine X-Hub-Signatur im HTTP-Header. Laut their documentation verwenden sie SHA1 und das Anwendungsgeheimnis als Schlüssel.Facebook Echtzeit-Update: Validierung der X-Hub-Signatur SHA1-Signatur in Java

Basierend auf einem similar question für C# habe ich versucht, die Unterschrift wie diese zu überprüfen (‚Körper‘ ist die Nachricht von Facebook in den Körper der Anfrage gesendet):

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); 

Aber die passedSignature ist immer anders aus die berechnete Signatur.

Jeder kann helfen, das Problem zu lösen?

+0

Sie müssen 'Charset.forName (" UTF-8 ")' nicht definieren, da das FB-Secret nur Latin1-Zeichen (ISO8859-1) verwendet. – jbrios777

Antwort

10

Stellt sich heraus, der Code korrekt ist, ich die falsche Taste wurde mit: -/

Auf jeden Fall hoffe ich, dies jemand anderes helfen könnte.