【问题标题】:errore with messageSignature sha256 in postman (base64 is notdefined.)邮递员中的消息签名 sha256 错误(未定义 base64。)
【发布时间】:2021-12-11 17:38:43
【问题描述】:

我正在测试一个 api,我必须根据文档将这些数据发送到正文中:

studentId,
apiKey,
timeStamp (current iso time as a string),
messageSignature: apikey+studentId+timeStamp encrypted using sha256,

我在 Pre-request Script 中编写了一个使用 sha256 生成消息签名的脚本。 预请求脚本:


    var dateIso = new Date().toISOString();
    pm.globals.set("isoDateTostring", dateIso);
    console.log('timestamp var is:', pm.globals.get("isoDateTostring"));
    
    let msg = "apiKeyvalue" + "studentId" + pm.globals.get("isoDateTostring");+ JSON.stringify(msg)
    
    const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, "secretKey");
    hmac.update(msg);
    const messageSignature = hmac.finalize().toString();

详情(如屏幕截图): 我在正文中写道:

{
"studentId":"********",
"apiKey":"************",
"timeStamp":{{$isoDateTostring}},
"messageSignature": {{$messageSignature}}
}

当我发送请求时,我得到的 base64 是未定义的。

【问题讨论】:

    标签: postman sha256 postman-pre-request-script


    【解决方案1】:

    代码如下:

    在标签正文中:

    {{$isoDateTostring}} --> "{{isoDateTostring}}"

    {{$messageSignature}} --> "{{messageSignature}}"

    {
        "studentId": "123",
        "apiKey": "123abc",
        "timeStamp": "{{isoDateTostring}}",
        "messageSignature": "{{messageSignature}}"
    }
    

    在标签中预请求:我伪造了studentIdapiKey

    const dateIso = new Date().toISOString();
    pm.globals.set("isoDateTostring", dateIso);
    
    const studentId = "123";
    const apiKeyvalue = "123abc"
    let msg = apiKeyvalue + studentId + pm.globals.get("isoDateTostring");
    
    const messageSignature = CryptoJS.SHA256(msg).toString();
    pm.globals.set("messageSignature", messageSignature);
    

    结果:

    {
        "studentId": "123",
        "apiKey": "123abc",
        "timeStamp": "2021-10-26T13:20:09.068Z",
        "messageSignature": "783e65ff1cfb2374fb5f84daa35c01d18b8a1898b3a1837e84934e91a3c0720d"
    }
    

    【讨论】:

    • 我按照你告诉我的那样纠正了它,但我仍然收到此错误:{"status": 400,"error": {"expose": true,"statusCode": 400," status": 400,"body": "{\r\n \"studentId\":\"stId\",\r\n \"apiKey\":\"12345A\",\r\n \"timeStamp \":2021-10-26T13:42:14.944Z,\r\n \"messageSignature\": 0az039883D\r\n}", "type": "entity.parse.failed"},"message": " JSON 中第 96 位的意外数字", "stack": "SyntaxError: JSON 中第 96 位的意外数字\n
    • 在 JSON.parse ()\n 在解析 (/usr/src/app/node_modules/body-parser/lib/types/json.js:89:19)\n 在/usr/src/app/node_modules/body-parser/lib/read.js:121:18\n 在 invokeCallback (/usr/src/app/node_modules/raw-body/index.js:224:16)\n完成后 (/usr/src/app/node_modules/raw-body/index.js:213:7)\n 在 IncomingMessage.onEnd (/usr/src/app/node_modules/raw-body/index.js:273: 7)\n 在 IncomingMessage.emit (events.js:228:7)\n 在 endReadableNT (_stream_readable.js:1185:12)\n 在 processTicksAndRejections (internal/process/task_queues.js:81:21)"}
    • 不,你没有听从我的建议。请仔细检查请求正文。 2021-10-26T13:42:14.944Z--> "2021-10-26T13:42:14.944Z", 0az039883D -> "0az039883D"
    • 这是我的正文请求(假 studentId 和 apiKey):{“studentId”:“123”,“apiKey”:“123abc”,“timeStamp”:{{isoDateTostring}},“messageSignature” : {{messageSignature}} }
    • 你能简单地复制我的代码吗?非常简单的事情花费了太多时间。您缺少日期和消息字符串的双引号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2019-12-16
    • 2018-10-23
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多