在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 相关文章推荐
Javascript中的变量使用说明
May 18 Javascript
js中AppendChild与insertBefore的用法详细解析
Dec 16 Javascript
用js代码改变单选框选中状态的简单实例
Dec 18 Javascript
jQuery无刷新切换主题皮肤实例讲解
Oct 21 Javascript
javaScript给元素添加多个class的简单实现
Jul 20 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
微信小程序 教程之引用
Oct 18 Javascript
浅谈JavaScript异步编程
Jan 20 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
Feb 12 Javascript
关于不同页面之间实现参数传递的几种方式讨论
Feb 13 Javascript
对angular4子路由&辅助路由详解
Oct 09 Javascript
JS造成内存泄漏的几种情况实例分析
Mar 02 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下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
php连接mysql数据库
2017/03/21 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
jQuery的学习步骤
2011/02/23 Javascript
js Dialog 实践分享
2012/10/22 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
Python列表推导式的使用方法
2013/11/21 Python
Python线程的两种编程方式
2015/04/14 Python
Django框架中方法的访问和查找
2015/07/15 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python多图片合并PDF的方法
2019/01/03 Python
Python中的self用法详解
2019/08/06 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
详解pandas映射与数据转换
2021/01/22 Python
Linux机考试题
2015/10/16 面试题
护理学应聘自荐书范文
2014/02/05 职场文书
美术教学感言
2014/02/22 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
装配出错检讨书
2014/09/23 职场文书
校长一岗双责责任书
2015/05/09 职场文书
雷锋的观后感
2015/06/10 职场文书