前后端身份认证
Session认证机制
Session机制的工作原理:
浏览器提交账号密码登录时,服务端将登录成功后的用户信息存储到服务器的内存中同时生成对应的cookie字符串,服务器响应时将这个cookie字符串发给客户端,浏览器自动把cookie字符串存储大当前域名下。当客户端再次发送其他需要登录权限的请求时,通过请求头自动把当前域名下所有可用的cookie发送给服务器。服务器接收进行身份认证之后响应内容。
JWT认证
浏览器提交账号密码登录时,登录成功后服务端通过密钥配置生成token字符串并响应给前端,前端请求具有登录权限的接口时通过请求头Authorization字段将token字符串带上。
以node.js为服务端粘贴代码
1、Session认证
npm i express-session //安装使用express-session中间件
// 导入express-session中间件
const session = require('express-session')
// 注册session中间件
app.use(
session({
secret: 'mingms',
resave: false,
saveUninitialized: true
})
)
//登录成功后将登录成功之后的用户信息保存到Session中
req.session.user = req.body
req.session.isligin = true
//访问有登录权限的接口时,做一下判断
if(!req.session.islogin){
return res.send({status:1,msg:'fail'})
}
res.send({
status:0,
msg:'success',
username:req.session.user.username
})
2、JWT认证
// 安装所需的包
npm i express-jwt jsonwebtoken
jsonwebtoken 用于生成JWT字符串
express-jwt 将JWT字符串解析还原成JSON对象
const jwt = require('jsonwebtoken')
const expressJWT = require('express-jwt')
// 定义 secret 密钥
const secretKey = 'mingms'
// 登录成功
// TODO_03:在登录成功之后,调用 jwt.sign() 方法生成 JWT 字符串。并通过 token 属性发送给客户端
// 参数1:用户的信息对象
// 参数2:加密的密钥
// 参数3:配置对象,可以配置当前 token 的有效期
const tokenstr = jwt.sign({username:userinfo.username},secretKey,{expiresIn:'30s'} )
res.send({
status: 200,
message: '登录成功!',
token: tokenstr // 要发送给客户端的 token 字符串
})
// 将 JWT 字符串解析还原成 JSON 对象的中间件
app.use(expressJWT({
secret:secretKey,
algorithms:['HS256']
}).unless({path:[/^\/api\//]}))