Facebook がリアルタイムの更新を送信するとき、HTTP ヘッダーに X-Hub-Signature が含まれます。彼らのドキュメントによると、SHA1 とアプリケーション シークレットをキーとして使用しています。
C# の同様の質問に基づいて、次のような署名を検証しようとしました (「本文」は、リクエストの本文で 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);
しかし、passedSignature は常に、calculatedSignature とは異なります。
誰もが問題を解決するのを助けることができますか?