Khi Facebook gửi các cập nhật theo thời gian thực, chúng bao gồm chữ ký X-Hub trong tiêu đề HTTP. Theo số their documentation, họ đang sử dụng SHA1 và bí mật ứng dụng làm khóa.Cập nhật thời gian thực trên Facebook: Xác thực chữ ký SHA1 chữ ký X-Hub trong Java
Dựa trên một similar question cho C# Tôi đã cố gắng để xác minh chữ ký như thế này ('body' là thông điệp gửi qua facebook trong cơ thể của các yêu cầu):
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);
Nhưng passedSignature luôn là khác nhau từ calculatorSignature.
Bất kỳ ai cũng có thể giúp giải quyết sự cố?
Bạn không cần phải xác định 'Charset.forName (" UTF-8 ")' vì bí mật FB chỉ sử dụng ký tự Latin1 (ISO8859-1). – jbrios777