9
Facebookがリアルタイム更新を送信すると、X-Hub-SignatureがHTTPヘッダーに含まれます。 their documentationによれば、彼らはSHA1とアプリケーションの秘密をキーとして使用しています。Facebookのリアルタイムアップデート:JavaでのX-Hub-Signature SHA1署名の検証
私はこのような署名を検証しようとしたのC#(「本体」は、要求の本体の投稿によって送信されたメッセージである)ため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は常に異なっていますcalculateSignature
誰でも問題を解決できますか?
FBシークレットはLatin1文字(ISO8859-1)のみを使用するため、 'Charset.forName(" UTF-8 ")を定義する必要はありません。 – jbrios777