2013-06-20 31 views
9

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ố?

+0

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

Trả lời

10

Tắt mã đúng, tôi đã sử dụng sai phím: -/

Dù sao tôi hy vọng điều này có thể giúp người khác.

Các vấn đề liên quan