如何利用npm jose库创建无签名(unsigned)JWT?
使用jose库创建无签名JWT的正确方法
当你需要创建alg为none的无签名JWT时,问题出在签名步骤传入的密钥类型不符合要求。针对你的场景,调整代码如下:
const jose = require('jose') async function getJwt() { const jwt = await new jose.SignJWT({ 'demo': 'unsigned JWT' }) .setProtectedHeader({ alg: 'none' }) .sign(null) // 传入null而非Uint8Array类型的密钥 console.log(jwt) } getJwt()
关键说明:
- 对于
none算法,jose库要求签名时传入的密钥必须是KeyObject/CryptoKey类型,或者直接传null(库内部会处理空签名逻辑)。你之前传入的Uint8Array类型密钥不符合要求,因此触发类型错误。 - 执行上述代码后,会生成标准的无签名JWT,格式为
[Base64编码的Header].[Base64编码的Payload].(第三部分为空字符串)。 - 注意:无签名JWT不具备防篡改能力,只能在完全信任的环境中使用,切勿在公开或不可信场景下传输。
内容的提问来源于stack exchange,提问作者hey
相关产品推荐
相关产品推荐

