JWT实现加密用户信息及信息验证
传送门
一、什么是JWT
- JWT —— json web token
- 用户认证成功之后,server 端返回一个加密的token给客户端
- 客户端后续每次请求都带 token ,以示当前的用户身份
二、搭建环境(koa2 环境)
npm install koa-generator -g
koa2 -e koa2-jwt-code
cd koa2-jwt-code
npm install
三、编写测试路由
//模拟登录
router.prefix('/users')
router.post('/login', async (ctx, next) => {const { username, password } = ctx.request.bodylet userInfoif (username === 'zhangsan' && password === '123') {userInfo = {userId: 1,userName: 'zhangsan',password: '123',nickName: '张三'}}if (userInfo == null) {ctx.body ={errno: -1,msg:"登录失败"}return}ctx.body = {errno: 0,userInfo}})
四、对返回的用户信息进行加密
- 安装插件
npm i koa-jwt --save (对是否为当前用户进行验证)
npm i jsonwebtoken --save (对返回信息进行加密)
- 配置插件
// app.jsconst jwtKoa = require('koa-jwt')
app.use(jwtKoa({secret:'1Hrj$_enferk' //密钥}
).unless({path:[/^\/users\/login/] //自定义哪些目录忽略 JWT 验证
}))
注:如果目录下使用 JWT 验证,每次访问该目录下的路由是需要携带 token 信息(即加密信息)才能访问该路由。
//对信息进行加密
const jwt = require('jsonwebtoken')
token = jwt.sign(userInfo, '1Hrj$_enferk',{expiresIn: '1h'})
五、服务端获取用户信息并解密信息
const until = require('util')
const verify = until.promisify(jwt.verify)router.get('/getUserInfo', async (ctx, next) => {const token = ctx.header.authorizationtry {const payload = await verify(token.split(' ')[1], '1Hrj$_enferk')ctx.body = {errno:0,userInfo: payload}} catch (ex) {ctx.body = {errno:-1,msg:'失败'}}
})
六、JWT vs Session
共同点:为了解决:登录和存储登录用户信息
不同点:
- JWT 用户信息加密存储在客户端,不依赖 cookie ,可跨域。
- session 用户信息存储在服务端,依赖于 cookie,默认不可跨域 。
JWT 的优点:
- 将加密信息存放在客户端,减少服务端的内存压力。
- 不依赖于 cookie 可以将信息进行跨域分享。
JWT的不足:
- 服务端无法控制信息,一旦用户修改信息后,服务端无法第一时间修改加密信息。
Session的优点:
- 可以对用户信息进行控制。
Session的不足:
- 存储要依赖于 redis 和 cookie ,并且不能跨域。
- 一旦上线启动多进程,而不依赖 redis 是无法实现多进程之间的信息共享。
JWT实现加密用户信息及信息验证相关推荐
- 用户修改了信息jwt服务器怎么识别,django使用JWT保存用户登录信息
什么是JWT? Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站 ...
- python加密敏感信息_仅需10行代码,使用python加密用户敏感数据
原标题:仅需10行代码,使用python加密用户敏感数据 数据分析师必须要遵守的一个规则就是数据保密,但在跨部门沟通的时候,难免会有数据泄露的情况,所以,对于用户的姓名.手机号.地址等敏感信息,一般需 ...
- .NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证。
.NET 实现自定义ContextUser的Identity和Principal 在传统的.NET中,我们可以通过 [csharp] view plaincopyprint? User.Identit ...
- 编写一个将用户输入的信息输出到网页的js程序 和 用if else验证用户输入的密码是否正确(两个代码)
js的一次作业罢了 tip:编写一个将用户输入的信息输出到网页的js程序 和 用if else验证用户输入的密码是否正确 (两个代码) 1.编写一个将用户输入的信息输出到网页的js程序 <!DO ...
- java jwt 用户认证_jwt身份验证
http协议是无状态协议,服务端不能从请求中判断用户的身份,用户怎么每次去找到自己对应的信息呢? 1. cookie 这种方式最简单,在用户第一次登陆成功某个网站A,网站A服务端就将你的用户信息(比如 ...
- springboot获取登录用户的个人信息
在Spring Boot中,获取登录用户的个人信息通常需要使用Spring Security框架来进行身份认证和授权.Spring Security提供了一个名为SecurityContextHold ...
- php获得注册信息,PHP网络编程:获取用户的注册信息[2]
PHP网络编程:获取用户的注册信息[2]以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! --此文章摘自<P ...
- Linux_PAM_用户之间的信息传递
PAM 账户信息的验证,可动态加载验证模块,提高验证的灵活性; PAM是一套应用程序接口,提供一连串的验证机制,借由一个与指令程序相同文件名的配置文件进行认证分析. 验证的过程包含三个字段: 1.验证 ...
- 智行火车票能否把用户的敏感信息屏蔽?
智行火车票能否把用户的敏感信息屏蔽?如果手机丢了,姓名身份证手机号就都丢了,捡到手机的人可以利用这些信息重置密码,登录淘宝,进而把支付宝中的免密支付和快捷支付的钱转走,建议把敏感信息部分用星号加密显示 ...
- 微信公众号给微信用户推送信息 模板信息
该功能主要是用于利用微信公众号向微信用户推送与用户相关的信息,在开发此功能之前需要获取到微信公众号的access_token,以及微信公众号的模板id 为了保证用户不受到骚扰,在开发者出现需要主动提醒 ...
最新文章
- 人脸检测识别文献代码
- MaximumGap的思想
- caffeine_使用Caffeine和Spring Boot的多个缓存配置
- 免费使用谷歌GPU训练神经网络
- 企业项目开发--切分配置文件
- 华为云计算之FusionStorage
- Requires: libstdc++.so.6(GLIBCXX_3.4.15)
- 006python路--深浅拷贝
- ubuntu 常用快捷键、常用命令
- easyUI学习笔记二
- _系列 | 全自动泊车辅助F-APA简介(系列一)
- python 3.5 format_python 3.5学习笔记(第四章)
- java项目收获总结_java开发项目收获心得
- ENVI实验教程(3)遥感图像预处理—几何校正
- token干什么用_token是什么意思(token的含义及使用方法)
- CPU占用100%的一般原因及解决办法
- 四、Raid卡(阵列卡)
- 群发邮件服务器软件,邮件服务器软件:邮件群发是否已死?
- 联网时显示已连接无法连接到服务器怎么办,路由器显示已连接不可上网怎么办?...
- 三分搜索--hdu2241 考研路茫茫——早起看书
热门文章
- ffmpeg结构体以及函数介绍(一)
- CodeforcesRound#498 (Div.3)E题Military Problem
- 在python中对文件操作的一般步骤是_文件操作(一) 笔记------python
- cvtcolor函数_5 OpenCV几个函数操作实例
- 柔性太阳能电池pdf_CIS太阳能电池.pdf
- truncate表和update 效率_SQL中Truncate的用法
- public protected default private权限修饰符理解
- [译]PEP 342--增强型生成器:协程
- HTTP缓慢拒绝服务攻击
- js变量按照存储方式区分,有哪些类型,并表述其特点