Docusign:使用密钥从 header 响应中验证 HMAC 密钥

Docusign: Verify HMAC key from header response with the secret key

我正在使用 Docusign connect 并计划使用 HMAC 密钥来验证消息。我指的是 https://developers.docusign.com/esign-rest-api/guides/connect-hmac#example-hmac-workflow link.

我发现文档中的一些术语令人困惑。附上 python.

文档中的代码片段
def ComputeHash(secret, payload):
  import hmac
  import hashlib
  import base64
  hashBytes = hmac.new(secret, msg=payload, digestmod=hashlib.sha256).digest()
  base64Hash = base64.b64encode(hashBytes)
  return base64Hash;

def HashIsValid(secret, payload, verify):
  return verify == ComputeHash(secret,payload)

你能解释一下上面代码中的有效载荷(不明白它到底是什么)、秘密(我在猜测密钥)和验证方法以及如何使用 [=26= 验证我的密钥]X-Docusign-Signature-1 我从响应中得到 header?

我的代码:

message = request.headers
hashBytes = hmac.new(secret_key.encode('utf-8'), msg=message.encode('utf-8'), digestmod=hashlib.sha256).hexdigest()
base64Hash = base64.b64encode(hashBytes)

[已编辑]

我自己找到了解决方案。请阅读第一个答案。我已经详细解释了。

抱歉造成混淆。 Payload 是“使用 POST 请求的整个正文,包括行结尾。” 这就是您在此处使用哈希 (HMAC) 函数编码的内容。

SHA256 HMAC 摘要接受一个字节数组(有效载荷)和一个秘密(用于加密的一些密钥)并生成一些稍后可以验证的有效载荷的加密版本。

我强烈建议您先确保在不使用 HAMC 编码的情况下了解 Connect webhook 的工作原理。此功能旨在保护您的应用程序,它有点复杂。如果你第一次让它在没有它的情况下工作 - 你会更好地了解正在发生的事情(并且对完成子任务感觉更好)。 一旦你让它工作,你可以添加 HMAC 来确保它的安全,然后它会更容易。

我找到了问题的解决方案。

expected_signature = request.headers['X-Docusign-Signature-1']
message = request.data      # It is already in bytes. No need to encode it again.
hashBytes = hmac.new(secret_key.encode('utf-8'), msg=message, digestmod=hashlib.sha256).hexdigest()
actual_signature = base64.b64encode(hashBytes)
hmac.compare_digest(actual_signature.decode('utf-8'),expected_signature):