Docusignapi 使用HMAC安全性和RESTAPI验证webhook请求

Docusignapi 使用HMAC安全性和RESTAPI验证webhook请求,docusignapi,docusignconnect,Docusignapi,Docusignconnect,我正在使用DocusSign connect webhook服务,希望使用HMAC安全性来验证请求。为此,我已按照中提到的说明进行操作 即: 在我们DocuSign上的帐户上,我为Connect设置了Include HMAC签名,并创建了一个Connect身份验证密钥 从Docusign Connect接收到连接消息,其中包含使用应用程序定义的HMAC密钥散列的数据的标头 但在第三步中面临问题,即使用以下代码验证HMAC签名- 但它总是返回false 谁知道我的哈希代码与从DocuSign收到的

我正在使用DocusSign connect webhook服务,希望使用HMAC安全性来验证请求。为此,我已按照中提到的说明进行操作 即:

  • 在我们DocuSign上的帐户上,我为Connect设置了Include HMAC签名,并创建了一个Connect身份验证密钥
  • 从Docusign Connect接收到连接消息,其中包含使用应用程序定义的HMAC密钥散列的数据的标头
  • 但在第三步中面临问题,即使用以下代码验证HMAC签名-
  • 但它总是返回false


    谁知道我的哈希代码与从DocuSign收到的哈希代码不同吗?

    您的比较测试错误,或者您的有效负载变量包含太多或太少

    要测试比较,请打印出
    computedHash
    headerSign

    要测试您的
    有效负载
    值,请将其打印出来,并检查它是否是发送给侦听器(您的服务器)的POST请求的整个主体

    还要检查您是否只有一个
    X-DocuSign-Signature
    标题。一种方法是确认标头
    X-DocuSign-Signature-2

    我已经提交了内部错误报告DEVDOCS-4874,因为它有一个错误

    // 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;
    }