我希望使用在客户端设备上生成的Ed25519私钥签署JWS(JSON Web Signature),并将此签名发送到后端进行公钥验证。
为了熟悉该过程,我想在Node.js中尝试签署和验证JWS。
我的私钥和公钥都已经生成,并且可用于base58格式。以下是我使用Ed25519私钥签署JWT的当前尝试:
我的私钥和公钥都已经生成,并且可用于base58格式。以下是我使用Ed25519私钥签署JWT的当前尝试:
const { SignJWT } = require("jose/jwt/sign");
const bs50 = require("bs58");
async function main() {
const publicBase58 = "A77GCUCZ7FAuXVMKtwwXyFhMa158XsaoGKHYNnJ1q3pv";
const privateKeyBase58 = "BE1VM7rTRJReLsTLLG4JMNX5ozcp7qpmMuRht9zB1UjU";
const publicKeyBuffer = bs50.decode(publicBase58);
const privateKeyBuffer = bs50.decode(privateKeyBase58);
const publicKey = new Uint8Array(publicKeyBuffer);
const privateKey = new Uint8Array(privateKeyBuffer);
const jwt = await new SignJWT({
subject: "uuid",
})
.setProtectedHeader({ alg: "EdDSA" })
.setExpirationTime("2h")
.sign(privateKey);
console.log(jwt);
}
错误: TypeError: 键必须是KeyObject或CryptoKey类型之一。接收到一个Uint8Array实例
当尝试使用sign()
函数时,由于我的私钥是Uint8Array
类型,因此会出现上述错误,唯一接受的类型为KeyObject
或CryptoKey
,但我不知道如何将我的Uint8Arrays转换为KeyObjects
或CryptoKeys
。
我从这个答案得到了一些代码片段。
subtle
模块。我已经尝试过const { subtle } = require('crypto').webcrypto;
。 - JonasLevin