我正在使用 DocusSign 连接 webhook 服务并希望使用 HMAC 安全性来验证请求。为此,我遵循了 https://developers.docusign.com/esign-rest-api/guides/connect-hmac中提到的说明 ,即:
- 在我们的 DocuSign 帐户中,我设置了 Connect 包含 HMAC 签名并创建了一个 Connect Authentication Key。
- 接收到来自 Docusign connect 的 Connect 消息,其中包含使用应用程序定义的 HMAC 密钥散列的数据的标头。
- 但是在第三步面临问题,即使用以下代码验证 HMAC 签名 -
// x-docusign-signature headers
String headerSign = request.getHeader("X-DocuSign-Signature-1");
String secret = "....";
-------
public static boolean HashIsValid(String secret, String payload,
String headerSign)
throws InvalidKeyException, NoSuchAlgorithmException,
UnsupportedEncodingException {
String computedHash = ComputeHash(secret, payload);
boolean isEqual =
MessageDigest.isEqual(computedHash.getBytes("UTF-8"),
headerSign.getBytes("UTF-8"));
return isEqual;
}
------
public static String ComputeHash(String secret, String payload)
throws InvalidKeyException, NoSuchAlgorithmException {
String digest = "HmacSHA256";
Mac mac = Mac.getInstance(digest);
mac.init(new SecretKeySpec(secret.getBytes(), digest));
String base64Hash = new String(
Base64.getEncoder().encode(mac.doFinal(payload.getBytes())));
return base64Hash;
}
但它总是返回 false。
谁知道为什么我的哈希码与从 DocuSign 收到的不同?