【问题标题】:How to sign JSON responses in Express如何在 Express 中签署 JSON 响应
【发布时间】:2022-02-09 14:57:52
【问题描述】:

我正在开发一个 Express.js 服务器;由于它管理敏感数据,我想使用私钥为每个响应添加加密签名。签名部分已经OK了,问题是在发送给客户端签名之前捕获JSON字符串。

理想情况下,我想添加一个自定义响应标头,例如X-signature,因此客户端可以根据服务公开的公钥验证接收到的有效负载。

在 Express 中,如何在 JSON.stringify() 调用之后但在标头发送之前截取响应正文?

【问题讨论】:

    标签: express signature


    【解决方案1】:

    我复制了compression() 中间件中所做的事情,用我自己的方法替换了send() Response 方法,并在计算签名后调用原始方法。这是一个简化的解决方案,只是为了展示这个概念,实际上我已经处理了body 的可能类型。 calculateSignature() 是一个异步函数这一事实有点麻烦,但现在一切似乎都运行良好。

    欢迎评论!

    import express, { RequestHandler } from 'express';
    
    declare const calculateSignature = (payload: string) => Promise<string>;
    
    const responseSignature = (): RequestHandler => (_, res, next) => {
        const _send = res.send;
        res.send = (body) => {
            if (isPlaintextType(body)) {
                calculateSignature(body)
                    .then((signature) => res.setHeader('X-Signature', signature))
                    .catch((e) => console.error(e))
                    .finally(() => _send.call(res, body));
                return res;
            } else {
                return _send.call(res, body);
            }
        };
        next();
    };
    
    
    const app = express();
    app.use(responseSignature());
    app.listen(3000);
    

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 2015-07-05
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 2017-03-03
      • 2014-10-05
      相关资源
      最近更新 更多