Bruno中解决“cose-js”导入限制:利用WebCrypto API的替代方案
2024-03-18 11:02:07
在 Bruno 中解决“cose-js”导入限制:使用 WebCrypto API 的替代方案
在无服务器运行时 Bruno 中,导入某些外部库,如“cose-js”,会受到限制。但是,通过利用 Bruno 内置的 WebCrypto API,我们可以找到替代解决方案,实现类似于“cose-js”的功能。
问题:Bruno 中的“cose-js”导入限制
Bruno 是一个沙盒环境,用于运行 Node.js 代码,但出于安全考虑,它限制导入某些外部库。这包括“cose-js”,这是一个用于处理 COSE(CBOR 对象签名和加密)的库。
解决方案:使用 WebCrypto API
解决此问题的方法是使用 Bruno 的 WebCrypto API,它提供类似于“cose-js”的功能。WebCrypto API 是一个内置于浏览器的加密 API,它允许开发者执行各种加密操作,包括密钥生成、加密和解密。
步骤指南:使用 WebCrypto API
1. 安装“@peculiar/webcrypto”库
bruno install @peculiar/webcrypto
此库提供了一个 WebCrypto API 的 polyfill,使其可在 Node.js 环境中使用。
2. 导入必要的库
const { TextDecoder, TextEncoder } = require('node:util');
global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder;
const { Crypto } = require("@peculiar/webcrypto");
const crypto = new Crypto();
这将导入必需的库并创建 WebCrypto 实例。
3. 生成密钥
const keys = await crypto.subtle.generateKey(
{
name: "ECDSA",
namedCurve: "P-256", // P-256, P-384, or P-521
},
false,
["sign", "verify"],
);
此代码生成用于签名和验证的密钥对。
4. 继续脚本
使用生成的密钥,你可以继续你的脚本,使用 WebCrypto API 来代替“cose-js”执行所需的操作。
白名单“@peculiar/webcrypto”
为了确保 Bruno 在运行脚本时加载“@peculiar/webcrypto”库,建议在 Bruno.json 文件的“moduleWhitelist”中显式列出它。
{
"version": "1",
"name": "myCollection",
"type": "collection",
"scripts": {
"moduleWhitelist": [ "@peculiar/webcrypto", "process", "buffer" ],
"filesystemAccess": {
"allow": true
}
},
"ignore": [
"node_modules",
".git"
]
}
常见问题解答
1. WebCrypto API 与“cose-js”有什么区别?
WebCrypto API 是浏览器原生的加密 API,而“cose-js”是一个 Node.js 库,用于处理 COSE。因此,它们在语法和功能上可能存在一些差异。
2. 我在哪里可以了解更多关于 WebCrypto API 的信息?
有关 WebCrypto API 的更多信息,请参阅 MDN 文档:https://developer.mozilla.org/en-US/docs/Web/API/WebCryptoAPI
3. 为什么 Bruno 限制导入外部库?
Bruno 限制导入某些外部库是为了提高安全性,因为外部库可能会引入漏洞或安全风险。
4. 除了“cose-js”之外,还有哪些其他外部库受 Bruno 限制?
“cose-js”并不是唯一受 Bruno 限制的外部库。其他受限库包括“crypto-browserify”、“stream-browserify”和“buffer”。
5. Bruno 中还有哪些替代“cose-js”的库?
除了 WebCrypto API 之外,Bruno 中没有其他已知的直接“cose-js”替代品。