前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js解析JWT

js解析JWT

作者头像
阿超
发布2024-08-23 17:12:37
410
发布2024-08-23 17:12:37
举报
文章被收录于专栏:快乐阿超

懂得生命真谛的人,可以使短促的生命延长。——西塞罗

代码如下:

代码语言:javascript
复制
"token".split(".").slice(0,2).map(i=>JSON.parse(atob(i)))

当我在解析 jwttoken 时,发现 token 中附带的用户 id 存在精度丢失问题,然后用正则改进解析 JWT 的代码:

代码语言:javascript
复制
const tokenParse = token => token.split(".").slice(0, 2).map(i => JSON.parse(atob(i).replace(/:\s*([-+]?\d+(\.\d+)?([eE][-+]?\d+)?)/g, (match, p1) => Math.abs(p1) > Number.MAX_SAFE_INTEGER ? `:"${p1}"` : `:${p1}`)));

但是还存在 base64 解码时无法正确解码中文问题,继续改进

代码语言:javascript
复制
const tokenParse = token => token.split(".").slice(0, 2).map(i => JSON.parse(new TextDecoder().decode(Uint8Array.from(atob(i), c => c.charCodeAt(0))).replace(/:\s*([-+]?\d+(\.\d+)?([eE][-+]?\d+)?)/g, (match, p1) => Math.abs(p1) > Number.MAX_SAFE_INTEGER ? `:"${p1}"` : `:${p1}`)));

使用:

代码语言:javascript
复制
tokenParse("你的token")

即可获取到源数据

注意这里我们 slicetoken 最后一部分,如果我们需要这部分维持原样:

代码语言:javascript
复制
const tokenParse = token => token.split('.').map((part, index) => index < 2 ? JSON.parse(new TextDecoder().decode(Uint8Array.from(atob(part), c => c.charCodeAt(0))).replace(/:\s*([-+]?\d+(\.\d+)?([eE][-+]?\d+)?)/g, (match, p1) => Math.abs(p1) > Number.MAX_SAFE_INTEGER ? `:"${p1}"` : `:${p1}`)) : part);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档