Docusign HMAC哈希不匹配

问题描述

我正在尝试使用HMAC对WebHook中的DocuSign请求进行身份验证,但是无论我做什么,生成的内容都不匹配任何传入的值。

我使用与DocuSign文档中相同的键和相同的代码,所以我猜唯一不同的是请求正文的提取。有人设法用C#进行这项工作吗?如何从请求中提取请求正文?

我的代码:

GenerateHash(key,GetRequestBodyByteArray())

    private static byte[] GetRequestBodyByteArray()
    {

        using (var buffer = new MemoryStream())
        {
            // Copy the request stream to the memory stream.
            var stream = HttpContext.Current.Request.InputStream;

            stream.Seek(0,SeekOrigin.Begin);
            stream.CopyTo(buffer);

            // Rewind the memory stream.
            buffer.Position = 0L;
            
            return buffer.ToArray();
        }
    }



        private string GenerateHash(string connectKey,byte[] requestBody)
    {
        var keyAsBytes = Encoding.UTF8.GetBytes(connectKey);
        var hmac = new HMACSHA256(keyAsBytes);
        var hashAsBytes = hmac.ComputeHash(requestBody);

        return Convert.ToBase64String(hashAsBytes);
    }

解决方法

请参见此guide Step2 C#示例。您也可以简化StreamReader。非常简化的版本看起来像这样,签名是标题中的 X-DocuSign-Signature-1

        Task<string> body;
        var signature = Request.Headers["x-docusign-signature-1"];
        string secret = "your secret";

        using (var reader = new StreamReader(Request.Body))
        {
            body = reader.ReadToEndAsync();
        }

        var result = Hmac.ComputeHash(secret,body.Result.ToString()).Equals(signature);            

    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...