如何解决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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。