当 Facebook 发送实时更新时,它们会在 HTTP header 中包含一个 X-Hub-Signature。根据their documentation ,他们使用 SHA1 和应用程序 secret 作为 key 。
基于 similar question对于 C#,我尝试像这样验证签名('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);
但是 passedSignature 总是不同于 calculatedSignature。
谁能帮忙解决问题?
最佳答案
原来密码是正确的,我用错了 key :-/
无论如何,我希望这可以帮助其他人。
关于java - Facebook 实时更新 : Validating X-Hub-Signature SHA1 signature in Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17221253/