jwt解密

认识JWT

什么是JWT?

JWT全称是JSON Web Token是一个开放标准(RFC 7519),目前最流行的跨域身份验证解决方案。

它定义了一种经过加密的格式,放在json对象在请求中传递,用于验证请求是否被允许访问。

JWT的原理

服务器经过认证以后,会生成加密串返回前台,结构如下图:

在这里插入图片描述

JSON Web Token由三部分组成,它们之间用.连接。

* Header 头部
* Payload 负载
* Signature 签名
Header

Header 部分用Base64URL解密后是一个JSON对象,主要描述了签名的算法和令牌类型。

    {
      "alg": "HS256",
      "typ": "JWT"
    }
Payload

Payload 部分同样也是一个JSON对象,它包含Claim。

Claim中存的就是这些字段,有三种类型:

Registered claims 预定义的声明
Public claims 公开声明
Private claims 私有声明

JWT 规定了7个Registered claims

iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号
Signature

Signature 部分是对前两部分的签名,用来防止数据篡改。

服务端指定密钥(secret),使用Header指定的签名算法,用转码后的JWT串产生签名。

JWT解码

1.解码工具
https://www.box3.cn/tools/jwt.html
2.官网
https://jwt.io/
3.函数
https://stackoverflow.com/questions/38552003/how-to-decode-jwt-token-in-javascript-without-using-a-library

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

    return JSON.parse(jsonPayload);
};

4.npm包

npm i jwt-decode

https://www.npmjs.com/package/jwt-decode

解码后:
在这里插入图片描述

参考:
https://www.jianshu.com/p/75b865e55568

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值