在node中使用jwt签发与验证token的方法


Posted in Javascript onApril 03, 2019

1.什么是token

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

token是在服务端产生的。如果前端使用用户名和密码向服务端发送请求认证,服务端认证成功,那么在服务端会返回token给前端。

前端可以在每次请求的时候带上token证明自己的合法地位。如果token在服务端持久化,那他就是一个永久的身份令牌。

2.什么是jwt

jwt,即JSON Web Token的缩写,是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间作为JSON对象安全地传输信息。

jwt由三个部分组成,它们之间用.分开,通常如下所示xxxxx.yyyyy.zzzzz,

第一个部分为Header,由两部分组成,类型和算法,例如

{
 "alg": "HS256", // 算法
 "typ": "JWT" // 类型
}

第二个部分为Payload,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。例如:

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

除了官方字段,你还可以在这个部分定义私有字段,下面就是一个例子。

{
 "sub": "1234567890",
 "name": "John Doe",
 "admin": true
}

请注意,对于token,此信息虽然可以防止被篡改,但任何人都可以读取。除非加密,否则不要将秘密信息放在JWT的Payload或Header元素中。

第三部分为Signature,Signature 部分是对前两部分的签名,防止数据篡改。

首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。

HMACSHA256(
 base64UrlEncode(header) + "." +
 base64UrlEncode(payload),
 secret)

算出签名以后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就可以返回给用户。

3.使用node签发token

首先需要下载jwt的依赖包

npm install jsonwebtoken

然后在文件中使用

var jwt = require('jsonwebtoken')
const payload = {
   name: 'boom'
  }
const secret = 'JQREAD'
const token = jwt.sign(payload, secret) // 签发
console.log(token)

jwt.sign(payload, secret) 就可以签发token了,然后返回给前端,前端将返回的token保存在localstorage里或sessionstorage里

4.使用node验证token

在用户完成登录获得token并保存后,此后每次请求后台把token放在请求头中,例如:

const guestToken = getStorage('token')
 if (guestToken) {
  config.headers['X-GuestToken'] = guestToken
 }

然后再后台验证token

var token = req.headers['x-guesttoken']
const secret = 'JQREAD' // secret要与签发时一致
jwt.verify(token, secret, (err, decoded) => {
  if(err){
   console.log(err)
   return
  }
  console.log(decoded)
}

验证失败会打印出 Invalid Signature

验证成功会打印签发时的payload数据,然后就可以继续进行操作,返回数据了。

总结

以上所述是小编给大家介绍的在node中使用jwt签发与验证token的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
JS创建优美的页面滑动块效果 - Glider.js
Sep 27 Javascript
JavaScript面向对象之静态与非静态类
Feb 03 Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 Javascript
JavaScript中的Math.LOG2E属性使用详解
Jun 14 Javascript
node.js require() 源码解读
Dec 13 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
使用jQuery卸载全部事件的思路详解
Apr 03 jQuery
JS实现简单短信验证码界面
Aug 07 Javascript
Vue验证码60秒倒计时功能简单实例代码
Jun 22 Javascript
深入解读Node.js中的koa源码
Jun 17 Javascript
element的el-table中记录滚动条位置的示例代码
Nov 06 Javascript
全面了解JavaScript的作用域链
Apr 03 #Javascript
从理论角度讨论JavaScript闭包
Apr 03 #Javascript
Node.js+Express+Mysql 实现增删改查
Apr 03 #Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 #Javascript
js前端面试之同步与异步问题详解
Apr 03 #Javascript
详解JavaScript 为什么要有 Symbol 类型?
Apr 03 #Javascript
es6 filter() 数组过滤方法总结
Apr 03 #Javascript
You might like
PHP应用JSON技巧讲解
2013/02/03 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
php数组添加元素方法小结
2014/12/20 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
vue router demo详解
2017/10/13 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
python 接收处理外带的参数方法
2018/12/03 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
高职助产应届生自荐信
2013/09/24 职场文书
出纳的岗位职责
2013/11/09 职场文书
个人简历自我评价范文
2014/02/04 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
志愿者个人总结
2015/03/03 职场文书
导游词之阆中古城
2019/12/23 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS