H5前端生成JWT-是不会还是不想弄

2,256 阅读2分钟

前言 

  什么是 JWT -- JSON WEB TOKEN   这是一个对JWT讲解特别好的文章

  首先前端生成JWT本身就是不对的,JWT应该在服务器生成,但是需求有了,是不能做还是不会做是两个事情。 我在网上找了好久JWT前端生成的插件,今天终于找到了,并且已经调通了,现记录一下。

前期准备

  这里推荐一个特别好的JWT官网,jwt.io/ 提供了在线验证JWT的功能,和各种开发语言生成JWT的解决方案。我生成JWT就是在这里找到的方案,我使用的是jsrsasign github地址

开始生成JWT

   jsrsasign官方案例地址 官网案例地址有一个小坑,导致我和服务器生成的结果不一样。

首先引入jsrsasign

  <script language="JavaScript" type="text/javascript"
          src="https://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js">
  </script>

第二步声明header

  var header = {
    'typ': 'JWT', // 声明类型
    'alg': 'HS256' // 声明加密的算法 通常直接使用 HMAC SHA256
  }

第三步声明载体

   载体我使用的JWT官网案例,这里需要根据实际业务场景改变。

  var payload = {
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022
  }

第四步生成JWT

   注意这一步和官网案例不同,secret是一个对象,并且里面只一个"utf8"的key,utf8对应的值就是和服务器约定的秘钥。 我就是卡在了这一步,但是官网在最下方给出了这个案例,当时没看见。

    var sHeader = JSON.stringify(header);
    var sPayload = JSON.stringify(payload);
    var sJWT = KJUR.jws.JWS.sign("HS256", sHeader, sPayload, {utf8: "secret"});

验证JWT

   jsrsasign官网案例地址 验证JWT就比较简单了,输入生成的JWT,还有秘钥,和加密的算法,就可以得到一个Boolean类型的返回值。

    var isValid = KJUR.jws.JWS.verifyJWT(sJWT, { utf8: "secret" }, { alg: ['HS256'] });

结尾

   好久没有写文章了,写的不好的地方请多多指教,谢谢。