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):
我正在使用 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):