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?
Sie müssen 'Charset.forName (" UTF-8 ")' nicht definieren, da das FB-Secret nur Latin1-Zeichen (ISO8859-1) verwendet. – jbrios777