在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 相关文章推荐
网页加载时页面显示进度条加载完成之后显示网页内容
Dec 23 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
javascript实现判断鼠标的状态
Jul 10 Javascript
浅谈window.onbeforeunload() 事件调用ajax
Jun 29 Javascript
用iframe实现不刷新整个页面上传图片的实例
Nov 18 Javascript
Angular的$http的ajax的请求操作(推荐)
Jan 10 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
javaScript日期工具类DateUtils详解
Dec 08 Javascript
jsonp跨域获取数据的基础教程
Jul 01 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
Jun 24 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 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绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
JS window.opener返回父页面的应用
2009/10/24 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
如何设置Java的运行环境
2013/04/05 面试题
数控技术学生的自我评价
2014/02/15 职场文书
家长学校工作方案
2014/05/07 职场文书
总经理任命书范本
2014/06/05 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers