在节点中解码 Jwt 令牌 - 无需库

Mah*_*esh 1 javascript node.js express jwt

我有以下代码来解码 Javascript 中的 Jwt 令牌(参考:如何解码 javascript 中的 jwt 令牌

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';

function parseJwt(token) {
  var base64Url = token.split('.')[1];
  var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  console.log(JSON.parse((atob(base64))))
};

parseJwt(token);
Run Code Online (Sandbox Code Playgroud)

我从上面的代码中获取了我需要的有效负载,但是我在节点中实现它,我们没有“atob”函数来解码base64编码的字符串

看来我们需要在节点中使用Buffer。我进行了研究并提出了以下不起作用的解决方案。

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
function parseJwt(token) {
  const base64Url = token.split('.')[1];
  const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  const buff = new Buffer(base64, 'base64');
  const payloadinit = buff.toString('ascii');
  const payload = JSON.parse(payloadinit);
  console.log(payload)
};
parseJwt(token);
Run Code Online (Sandbox Code Playgroud)

如果有更好的方法,请告诉我 - 无库(Jwt 或解码 Jwt)

Mah*_*esh 8

实际上我已经在独立环境中尝试过了,上面的代码就像魅力一样获得 Jwt 令牌有效负载

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'

const base64Url = token.split('.')[1];
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
const buff = new Buffer(base64, 'base64');
const payloadinit = buff.toString('ascii');
const payload = JSON.parse(payloadinit);
console.log(payload);
Run Code Online (Sandbox Code Playgroud)

https://repl.it/@Punith/RuralSeveralAdaware