【问题标题】:Azure Logic Apps - generated HMAC-SHA256 method signatureAzure 逻辑应用 - 生成的 HMAC-SHA256 方法签名
【发布时间】:2021-05-16 12:38:31
【问题描述】:

我希望构建一个逻辑应用工作流以连接到 REST API 以从 Unleashed API (https://apidocs.unleashedsoftware.com/AuthenticationHelp) 获取产品列表(以 JSON 格式返回)。

我已经在 postmaan 中对 GET 请求进行了原型设计,并在预请求脚本中成功生成了所需的 HMAC-SHA256 加密方法签名。现在我需要找到一种方法在我的逻辑应用工作流中做同样的事情。

在发现逻辑应用内联代码组件除了基本的 Javascript(无法访问加密函数)之外什么都不会给我,我想在 node.js 中编写一个 Azure 函数 - 选择 node.js 主要是为了能够重用我的预请求脚本代码。不幸的是,我对此一无所知 - 垂直学习曲线并没有完全涵盖它!

一方面,是不是有某种内联触发器允许我访问函数而不必发送 HTTP 请求?以及如何填充输出绑定以取回哈希值?

我的预请求脚本如下

var urlParam = "modifiedSince2021-04-01";
var url = "https://api.unleashedsoftware.com/" + "Products?" + urlParam;
var hash = CryptoJS.HmacSHA256(urlParam, 'Customer API-KEY here');
var hash64 = CryptoJS.enc.Base64.stringify(hash);

pm.environment.set("BaseURI", url);
pm.environment.set("hmacKey", hash64);

对于构建我的 node.js 的任何帮助,或任何其他将其转变为 Azure 中的解决方案的建议,我们将不胜感激。

【问题讨论】:

    标签: node.js azure-functions azure-logic-apps public-key-encryption


    【解决方案1】:

    如果要在 Azure 逻辑应用中运行自己的节点代码,可以使用内联代码操作或天蓝色函数操作。但是如果我们想用一些第三方包运行节点代码,我们只能使用Azure函数动作。同时,当我们使用 Azure 函数动作时,函数必须使用 HTTP 触发器模板。更多详情请参考here和here。

    例如

    1. 在函数应用中定义 Azure 函数
    const CryptoJS = require("crypto-js");
    module.exports = async function (context, req) {
        context.log('JavaScript HTTP trigger function processed a request.');
        //get the data used to sign from request body
          const data = req.body.data
    
       // sign
       const str = CryptoJS.HmacSHA256(
         CryptoJS.enc.Utf8.parse(req.body.data),,
    
        "key"
      );
         const sig = CryptoJS.enc.Base64.stringify(str);
    
         context.res = {
           
            body: sig // return the hash
         };
    }
    
    1. 在 Azure 逻辑应用中调用函数

    1. 使用 azure 函数返回的哈希数据调用 API。我们可以使用表达式@{body('<action name>')} 来获取哈希数据。例如

    2. 测试结果

    【讨论】:

    • 感谢您提供如此全面而有帮助的回复。我确实想出了一个非常相似的解决方案,但我简直不敢相信我必须花这么多时间来填充加密的方法签名——我以为我在某个地方错过了一个简单的技巧!我会说,绝对需要让内联代码组件访问像 CryptoJS 这样的库。
    • @RobEdwin 根据情况,我建议你直接使用azure函数来实现你的需求:生成sig并调用api。
    • @RobEdwin 如果您没有其他问题,能否将解决方案标记为答案:meta.stackexchange.com/questions/5234/…?它可能会帮助更多有类似问题的人。
    • 很高兴这样做,吉姆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多