节点RSA和Firebase函数 - 为什么错误:DSO支持例程:win32_load:无法加载?

发布于 2025-01-26 08:29:52 字数 2068 浏览 3 评论 0原文

我在firebase函数中使用node-rsa软件包,但是当我运行模拟器测试该功能时,我会收到以下错误:

错误:错误:25078067:DSO支持例程:win32_load:无法在sign.sign上加载共享库(node:internal/crypto/sig/sig/sig:131:29) desktop \ work \ xxx \ functions \ node_modules \ node-rsa \ src \ src \ schemes \ pkcs1.js:154:27)在rsakey.module.module.exports.key.rsakey.rsakey.sign.sign.sign

我不知道该如何从这里和如何进行此操作。这是我的firebase云功能:

import NodeRSA from 'node-rsa'
import * as functions from 'firebase-functions'

const keyData = {
  consumerId: '<ID REMOVED>',
  privateKey: `-----BEGIN RSA PRIVATE KEY-----
  <PRIVATE KEY REMOVED>
  -----END RSA PRIVATE KEY-----`,
  keyVer: 1
  //   impactId: "YOUR IMPACT AFFILIATE ID" // not required
}

const generateWalmartHeaders = () => {
  const { privateKey, consumerId, keyVer } = keyData
  const hashList = {
    'WM_CONSUMER.ID': consumerId,
    'WM_CONSUMER.INTIMESTAMP': Date.now().toString(),
    'WM_SEC.KEY_VERSION': keyVer
  }

  const sortedHashString = `${hashList['WM_CONSUMER.ID']}\n${hashList['WM_CONSUMER.INTIMESTAMP']}\n${hashList['WM_SEC.KEY_VERSION']}\n`
  const signer = new NodeRSA(privateKey, 'pkcs1')
  const signature = signer.sign(sortedHashString)
  const signatureEnc = signature.toString('base64')

  return {
    'WM_SEC.AUTH_SIGNATURE': signatureEnc,
    'WM_CONSUMER.INTIMESTAMP': hashList['WM_CONSUMER.INTIMESTAMP'],
    'WM_CONSUMER.ID': hashList['WM_CONSUMER.ID'],
    'WM_SEC.KEY_VERSION': hashList['WM_SEC.KEY_VERSION']
  }
}

export const getProductById = functions.https.onRequest(async (req, res) => {
  const options = {
    method: 'GET',
    headers: generateWalmartHeaders()
  }

  try {
    const response = await fetch(
      `https://developer.api.walmart.com/api-proxy/service/affil/product/v2/items/4837473`,
      options
    )
    const product = await response.json()
    console.log('product?', product)
    res.send(product)
  } catch (error) {
    console.log('error in walmartjs', error)
    res.status(500).send(error)
  }
})

有人知道为什么我会遇到这个错误吗?

I am using the node-rsa package in a firebase function , but when I run the emulator to test the function, I get the following error:

Error: error:25078067:DSO support routines:win32_load:could not load the shared library at Sign.sign (node:internal/crypto/sig:131:29) at Scheme.sign (C:\Users\XXX\Desktop\work\XXX\functions\node_modules\node-rsa\src\schemes\pkcs1.js:154:27) at RSAKey.module.exports.Key.RSAKey.sign

I have no idea where to go from here and how to troubleshoot this. Here's my firebase cloud function:

import NodeRSA from 'node-rsa'
import * as functions from 'firebase-functions'

const keyData = {
  consumerId: '<ID REMOVED>',
  privateKey: `-----BEGIN RSA PRIVATE KEY-----
  <PRIVATE KEY REMOVED>
  -----END RSA PRIVATE KEY-----`,
  keyVer: 1
  //   impactId: "YOUR IMPACT AFFILIATE ID" // not required
}

const generateWalmartHeaders = () => {
  const { privateKey, consumerId, keyVer } = keyData
  const hashList = {
    'WM_CONSUMER.ID': consumerId,
    'WM_CONSUMER.INTIMESTAMP': Date.now().toString(),
    'WM_SEC.KEY_VERSION': keyVer
  }

  const sortedHashString = `${hashList['WM_CONSUMER.ID']}\n${hashList['WM_CONSUMER.INTIMESTAMP']}\n${hashList['WM_SEC.KEY_VERSION']}\n`
  const signer = new NodeRSA(privateKey, 'pkcs1')
  const signature = signer.sign(sortedHashString)
  const signatureEnc = signature.toString('base64')

  return {
    'WM_SEC.AUTH_SIGNATURE': signatureEnc,
    'WM_CONSUMER.INTIMESTAMP': hashList['WM_CONSUMER.INTIMESTAMP'],
    'WM_CONSUMER.ID': hashList['WM_CONSUMER.ID'],
    'WM_SEC.KEY_VERSION': hashList['WM_SEC.KEY_VERSION']
  }
}

export const getProductById = functions.https.onRequest(async (req, res) => {
  const options = {
    method: 'GET',
    headers: generateWalmartHeaders()
  }

  try {
    const response = await fetch(
      `https://developer.api.walmart.com/api-proxy/service/affil/product/v2/items/4837473`,
      options
    )
    const product = await response.json()
    console.log('product?', product)
    res.send(product)
  } catch (error) {
    console.log('error in walmartjs', error)
    res.status(500).send(error)
  }
})

Anyone got any idea on why I am getting that error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千紇 2025-02-02 08:29:52

您不应复制-----开始RSA私有密钥----------结束RSA私有密钥------这2行作为私钥的一部分。
请务必删除这2行作为私有密钥的一部分

“在此处输入图像描述”

问候,
firdos
iosupport

You should NOT copy -----BEGIN RSA PRIVATE KEY----- and -----END RSA PRIVATE KEY----- these 2 lines as part of private key.
Please kindly remove these 2 lines as part of private key

enter image description here

Regards,
Firdos
IOSupport

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文