NodeJS 学习笔记 (七)Express中身份认证怎么做?JWT

JWT认证机制

Session认证机制需要配合Cookie才能实现。由于Cookies默认不支持跨域访问,所以,当涉及到前段跨域请求后端接口的时候,需要很多额外的配置,才能实现跨域Session认证。

当前端请求后端接口不存在跨域问题的时候,推荐使用Session身份认证机制
当前端需要跨域请求后端接口的时候,不推荐使用Session身份认证机制,推荐使用JWT身份认证机制

在这里插入图片描述

组成部分

Header:头部
Payload:有效负荷
Signature:签名
三者之间使用’.'分割
Header和Signature
安全性的相关部分,保证Token的安全性,防止用户破解
Payload
真正的用户信息,加密后生成的字符串

使用方式

客户端收到服务器的JWT之后,通常会把它存储在localStorage或sessionStorage中
此后,客户端每次和服务器通信,都要带上这个JWT字符串,从而进行身份认证。推荐的做法是吧JWT放在HTTP请求头的Authorization字段中
格式如下

Authorization:Bearer <token>

安装JWT相关的包

npm i jsonwebtoken express-jwt

jsonwebtoken用来生成JWT字符串
express-jwt用来将JWT字符串解析还原成JSON对象

定义secret密钥

为了保证JWT字符串的安全性,防止JWT字符串在网络传输过程中被别人破解,我们需要定义一个用于加密和解密的secret密钥
1.当生成JWT字符串时,需要使用secret密钥对用户的信息进行加密,最终得到加密好的JWT字符串。
2.当把JWT字符串解析还原成JSON对象的时候,需要使用secret密钥进行解密

const secretKey='itheima No1'

登陆成功后生成JWT字符串

调用jsonwebtoken包提供的sign()方法,将用户的信息加密成JWT字符串,响应给客户端:

app.post('/api/login',function(req,res){
	res.send({
		status:200,
		message:'登陆成功',
		//调用jwt.sign()生成JWT字符串,三个参数:用户信息对象,加密密钥,配置对象
		token:jwt.sign({username:userinfo.username},secretKey,{expiresIn:'30s'})
	})
})

将JWT字符串还原成JSON对象

app.use(express({secret:secretKey}).unless({path:[/^\/api\/]}))

捕获解析JWT失败后产生的错误

当使用Token字符串时,如果Token过期或者不合法,会产生一个解析失败的错误,影响项目的正常运行,我们可以通过Express的错误中间件,捕获这个错误并进行相关的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值