जब फेसबुक रीयल-टाइम अपडेट भेजता है, तो वे HTTP शीर्षलेख में एक्स-हब-हस्ताक्षर शामिल करते हैं। their documentation के अनुसार, वे SHA1 और एप्लिकेशन के रूप में एप्लिकेशन गुप्त का उपयोग कर रहे हैं।फेसबुक रीयल-टाइम अपडेट: जावा में एक्स-हब-हस्ताक्षर SHA1 हस्ताक्षर मान्य करना
सी # के लिए एक similar question के आधार पर मैं इस तरह हस्ताक्षर को सत्यापित करने की कोशिश की ('शरीर' संदेश अनुरोध के मुख्य भाग में फेसबुक द्वारा भेजे गए है):
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 हमेशा से अलग है गणना की गई हस्ताक्षर।
कोई भी समस्या को हल करने में मदद कर सकता है?
आपको 'Charset.forName ("UTF-8") को परिभाषित करने की आवश्यकता नहीं है क्योंकि एफबी गुप्त केवल लैटिन 1 वर्ण (आईएसओ 885 9 -1) का उपयोग करता है। – jbrios777