Node.js HMAC-SHA256 签名认证

Node.js HMAC About 914 words

需求

对于WebHook,对外提供的API,均需要验证请求方的真实性。

方法

  • IP白名单
  • 签名认证
    • HMAC-SHA256
    • MD5(简易版)

HMAC-SHA256

64位长度的字符串(只有26个字母的大小写和0-9的数字组成),可以先做长度和字符的正则匹配。

if(!/^[a-fA-F0-9]{64}$/.test(signature)) {
    console.log(`Invalid Sign Length. ${signature}`);
    return false;
}

服务端

import crypto from "crypto";

const HMAC_SECRET: string = process.env.HMAC_SECRET!;

function verify(payload: string, signature: string) {
    const expected = crypto
        .createHmac("sha256", HMAC_SECRET)
        .update(payload)
        .digest("hex");

    return crypto.timingSafeEqual(
        Buffer.from(signature, "hex"),
        Buffer.from(expected, "hex")
    );
}

客户端

import {createHmac} from "crypto";

const HMAC_SECRET: string = process.env.HMAC_SECRET!;

function sign(msg: string) {
    const signature = createHmac("sha256", HMAC_SECRET)
        .update(msg, "utf8")
        .digest("hex");
}

说明

可以添加一些其他的字段参与计算,如:时间戳、User-AgentIP等。

Views: 11 · Posted: 2026-06-10

———         Thanks for Reading         ———

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓
Prev Post
Today In History
Browsing Refresh