最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

生成JWT表单标头和有效载荷

IT培训 admin 12浏览 0评论

生成JWT表单标头和有效载荷

我正在使用节点js在后端服务器中创建jwt。我正在使用一个库来签名/验证JWT,它工作正常。一次jwt.io,我将粘贴我登录时获得的令牌,并且可以在有效负载中看到我的数据。所以问题是我试图从标头和在jwt.io中返回的有效负载生成签名这是我尝试做的,但是没有用,我有些困惑。用于签名的算法是默认的HS256。

const crypto = require("crypto");

// encode base64 the header
let jsonHeader = JSON.stringify({
  alg: "HS256",
  typ: "JWT",
});
let bs64header = Buffer.from(jsonHeader).toString("base64").split("=")[0];
console.log("bs64header :>>\n ", bs64header); //look the same as the token i got

// encode vase64 the payload
let jsonPayload = JSON.stringify({
  id: "5eb20004ac94962628c68b91",
  iat: 1589125343,
  exp: 1589989343,
  jti: "37743739b1476caa18ca899c7bc934e1aba63ba1",
});
let bs64payload = Buffer.from(jsonPayload).toString("base64").split("=")[0];
console.log("bs64Payload :>> \n", bs64payload); //look the same as the token i got

// TRY to generate the signature from the Base64Header and Base64Payload
// with the secret code that i used to sign the JWT
let secret = "0d528cb666023eee0d44e725fe9dfb751263d2f68f07998ae7388ff43b1b504f";
let signature = bs64header + "." + bs64payload;

let hashed = crypto
  .createHash("sha256", secret)
  .update(signature)
  .digest("hex");

console.log("hashed :>> \n", hashed);

let bs64signature = Buffer.from(hashed).toString("base64").split("=")[0];
console.log("bs64signature>>", bs64signature); //This is where i got stuck.

// let jwt = bs64header + "." + bs64payload + "." + bs64signature;
// console.log("jwt>>", jwt);


回答如下:

我已对您的代码进行了很多修改,以使其重复性更小,更易于阅读。我不确定这是否行得通,所以如果有任何错误,请发表评论。

我已经在runkit中对其进行了测试,并且还使用jwt.io检查了输出内容。输出似乎是相同的,因此我可以肯定这是可行的。

更改

  • [创建了一个用于base64编码对象和字符串的函数。
  • 创建了一个使base64字符串使用URL安全字符集的函数。
  • crypto.createHash()更改为crypto.createHash(),因此实际上可以使用密钥。
crypto.createHmac()

生成JWT表单标头和有效载荷

我正在使用节点js在后端服务器中创建jwt。我正在使用一个库来签名/验证JWT,它工作正常。一次jwt.io,我将粘贴我登录时获得的令牌,并且可以在有效负载中看到我的数据。所以问题是我试图从标头和在jwt.io中返回的有效负载生成签名这是我尝试做的,但是没有用,我有些困惑。用于签名的算法是默认的HS256。

const crypto = require("crypto");

// encode base64 the header
let jsonHeader = JSON.stringify({
  alg: "HS256",
  typ: "JWT",
});
let bs64header = Buffer.from(jsonHeader).toString("base64").split("=")[0];
console.log("bs64header :>>\n ", bs64header); //look the same as the token i got

// encode vase64 the payload
let jsonPayload = JSON.stringify({
  id: "5eb20004ac94962628c68b91",
  iat: 1589125343,
  exp: 1589989343,
  jti: "37743739b1476caa18ca899c7bc934e1aba63ba1",
});
let bs64payload = Buffer.from(jsonPayload).toString("base64").split("=")[0];
console.log("bs64Payload :>> \n", bs64payload); //look the same as the token i got

// TRY to generate the signature from the Base64Header and Base64Payload
// with the secret code that i used to sign the JWT
let secret = "0d528cb666023eee0d44e725fe9dfb751263d2f68f07998ae7388ff43b1b504f";
let signature = bs64header + "." + bs64payload;

let hashed = crypto
  .createHash("sha256", secret)
  .update(signature)
  .digest("hex");

console.log("hashed :>> \n", hashed);

let bs64signature = Buffer.from(hashed).toString("base64").split("=")[0];
console.log("bs64signature>>", bs64signature); //This is where i got stuck.

// let jwt = bs64header + "." + bs64payload + "." + bs64signature;
// console.log("jwt>>", jwt);


回答如下:

我已对您的代码进行了很多修改,以使其重复性更小,更易于阅读。我不确定这是否行得通,所以如果有任何错误,请发表评论。

我已经在runkit中对其进行了测试,并且还使用jwt.io检查了输出内容。输出似乎是相同的,因此我可以肯定这是可行的。

更改

  • [创建了一个用于base64编码对象和字符串的函数。
  • 创建了一个使base64字符串使用URL安全字符集的函数。
  • crypto.createHash()更改为crypto.createHash(),因此实际上可以使用密钥。
crypto.createHmac()

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论