Facebook实时更新:在Java中验证X-Hub-Signature SHA1签名

时间:2013-06-20 18:36:58

标签: java facebook sha real-time-updates

当Facebook发送实时更新时,它们在HTTP标头中包含X-Hub-Signature。根据{{​​3}},他们使用SHA1和应用程序密钥作为密钥。

基于C {的their documentation我尝试验证这样的签名('body'是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);

但passSignature总是与calculatedSignature不同。

有人可以帮忙解决问题吗?

1 个答案:

答案 0 :(得分:12)

原来代码是正确的,我使用了错误的密钥: - /

无论如何,我希望这可以帮助其他人。