【问题标题】:Decode Jwt Token in Node - without Library在节点中解码 Jwt 令牌 - 没有库
【发布时间】:2019-03-22 14:46:08
【问题描述】:

我有以下代码来解码 Javascript 中的 Jwt 令牌(参考:How to decode jwt token in javascript

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);

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

似乎我们需要在节点中使用缓冲区。我进行了研究并提出了以下无效的解决方案。

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);

如果有更好的方法,请告诉我 - 没有库(Jwt 或 decode-Jwt)

【问题讨论】:

    标签: javascript node.js express jwt


    【解决方案1】:

    实际上我已经在独立环境中尝试过,上面的代码就像获取 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);

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

    【讨论】:

    • 谢谢!在节点 10 及以上,使用const buff = Buffer.from(base64, "base64"); 而不是 new Buffer。
    【解决方案2】:
    const DecodeJWT= (token) => {
      try {
        return JSON.parse(atob(token.split('.')[1]));
      } catch (e) {
        return null;
      }
    };
    

    简单易行的方法

    【讨论】:

    • 很好的解决方案,也可以直接在客户端执行,无需缓冲区
    猜你喜欢
    • 2021-12-30
    • 2018-10-05
    • 1970-01-01
    • 2019-05-19
    • 2015-10-02
    • 2020-04-22
    • 2019-10-11
    • 2018-11-02
    • 2017-04-16
    相关资源
    最近更新 更多