【问题标题】:Facebook Real-time Update: Validating X-Hub-Signature SHA1 signature in JavaFacebook 实时更新:在 Java 中验证 X-Hub-Signature SHA1 签名
【发布时间】:2013-06-17 18:13:18
【问题描述】:

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

基于 C# 的 similar question,我尝试验证这样的签名(“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);

但传递的签名总是与计算的签名不同。

谁能帮忙解决问题?

【问题讨论】:

  • 您不需要定义Charset.forName("UTF-8"),因为 FB 密码仅使用 Latin1 字符 (ISO8859-1)。

标签: java facebook sha real-time-updates


【解决方案1】:

原来代码是正确的,我用错了键:-/

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

【讨论】:

  • 我也是! :-( 应该使用 App Secret Token,而不是验证请求中使用的 Verify Token ('hub.verify_token')。
猜你喜欢
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多