HMAC - 通过 Postman 进行 SHA256 身份验证

mr_*_*cle 8 javascript ruby-on-rails hmac postman postman-pre-request-script

我正在尝试通过 Postman 模拟对我的 Rails 应用程序的 webhook POST 请求(在真实的工作流程中运行良好)。我找到了很多例子,但没有一个起作用 - 我不断收到 401 代码。我所做的是定义标题,Pre-request Script如下所示:

\n

邮递员标题

\n

JSPre-request Script基于此文档

\n
postman.setEnvironmentVariable("hmac", CryptoJS.HmacSHA256(request.data, \'my_secret_string\').toString(CryptoJS.digest));\n
Run Code Online (Sandbox Code Playgroud)\n

但我仍然收到 401 错误。

\n

我用来触发 webhook 的外部 API 文档明确指出:

\n
\n

每个 Webhook 将使用 \xe2\x80\x8b X-AQID-Signature\xe2\x80\x8b 标头发送,该标头是通过使用 HMAC 方法和 SHA256 算法对请求的有效负载进行哈希处理而创建的,使用共享密钥作为盐。这意味着在收到有效负载后,您可以通过复制哈希方法来验证其完整性。

\n
\n

正如我所说,它在现实生活工作流程中运行良好,因此我在邮递员实现中遇到了错误。我错过了什么?

\n

sin*_*pop 11

您不需要设置任何环境变量,只需从脚本中添加标头。我在一个非常相似的案例中这样做了:

var signBytes = CryptoJS.HmacSHA256(pm.request.body.raw, 'YOUR_SECRET');
var signHex = CryptoJS.enc.Hex.stringify(signBytes);
pm.request.headers.add({
    key: "HEADER_NAME",
    value: signHex
});
Run Code Online (Sandbox Code Playgroud)


Guc*_*112 6

如果你需要Base64编码值,那么你可以这样做:

CryptoJS.HmacSHA256(pm.request.body.raw, 'YOUR_SECRET').toString(CryptoJS.enc.Base64);
Run Code Online (Sandbox Code Playgroud)