如何在不使用库的情况下在 javascript 中解码 jwt 令牌?

新手上路,请多包涵

如何使用 JavaScript 解码 JWT 的有效负载?没有图书馆。所以令牌只返回一个可以被我的前端应用程序使用的有效负载对象。

示例令牌: xxxxxxxxx.XXXXXXXX.xxxxxxxx

结果是有效载荷:

{exp: 10012016 name: john doe, scope:['admin']}

原文由 Chrisk8er 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

注意:这不会验证签名,它只是从令牌中提取 JSON 有效负载,这可能已被篡改。

浏览器

工作 unicode 文本 JWT 解析器功能:

 function parseJwt (token) {
 var base64Url = token.split('.')[1];
 var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
 var jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) {
 return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
 }).join(''));

 return JSON.parse(jsonPayload);
 };

JWT 使用 base64url (RFC 4648 §5),因此仅使用 atob (使用 base64 )是不够的。

节点.js

 function parseJwt (token) {
 return JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
 }

原文由 Peheje 发布,翻译遵循 CC BY-SA 4.0 许可协议

带有 try - catch 的简单函数

const parseJwt = (token) => {
  try {
    return JSON.parse(atob(token.split('.')[1]));
  } catch (e) {
    return null;
  }
};

谢谢!

原文由 Rajan Maharjan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题