【前端——Node.js】:身份认证

38 阅读4分钟

 一、前后端身份认证

1.web开发者模式

(1)服务端渲染的Web开发模式

(2)前后端分离的web开发模式

 选择:

 2.身份认证

    身份认证:又称身份验证、鉴权,是指通过一定的手段,完成对用户的身份确认。

   不同开发模式下的身份认证:

 3.Session认证机制

(1)HTTP协议的无状态性

      HHTP协议的无状态性,指的是客户端的每次HTTP请求都是独立的,连续多个请求之间没有直接的关系,服务器不会主动保留每次HTTP请求的状态
(2)突破HTTP无状态的限制——Cookie

       cookie:是存储在用户浏览器中的一段不超过4KB的字符串。它由一个名称(Name),一个值 (Value)和其他几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。

      不同域名下的Cookie各自独立,每当客户端发起请求时,会自动把当前 域名下所有未过期的Cookie一同发送到服务器

   Cookie特性:①自动发送  ②域名独立    ③过期时限   ④4KB限制

(3)Cookie在身份认证中的作用

(4)Cookie不具有安全性

       由于Cookie是存储在浏览器当中的,而且浏览器也提供了读写Cookie的API,因此Cookie很容易被伪造,不具有安全性。因此不建议服务器将重要的隐私数据,通过Cookie的形式发送给浏览器。

(5)Session的工作原理

 4.在Express中使用Session认证

(1)安装express-session中间件

(2)配置express-session中间件

       需要通过app.use()来注册session中间件

const session=require('express-session')
 app.use(
    session({
        secret:'myself',//secrect属性的值可以为任意字符串
        resave:false,//固定写法
        saveUninitialized:true,//固定写法

    })
 )

(3)向session中存数据

   当express-session中间件配置成功之后,即可通过热情。session来访问和使用session对象,从而存储用户的关键信息。

//登录API接口
app.post('/api/login',(req,res)=>{
    //判断用户提交的登录信息是否正确
    if(req.body.username!=='admin'||req.body.password!=='00000'){
        return res.send({ status:1, msg:'登陆失败'})
    }

//TODO_02:请将登陆成功后的用户信息,保存到session中
//只有成功配置了express-session这个中间件之后,才能通过req点出来session这个属性。
//这里user的位置就是我们自己定义的,想变成什么都可以
    req.session.user=req.body  // 用户信息存储到session中
    req.session.islogin=true   // 将用户的登陆状态,存储到session中

    return res.send({ status:0, msg:'登陆成功'})
})

(4)从session中取数据

可以直接从req.session对象上获取之前存储的数据

//获取用户姓名的接口
app.get('/api/username',(req,res)=>{
    //TODO_03:请从session中获取用户的名称,响应给客户端
    //先判断用户是否登录
    if(!req.session.islogin){
        return res.send({status:1, msg:'fail'})
    }

    res.send({
        status: 0,
        msg:'success',
        username:req.session.user.username,
    })
})

(5)清空session

调用:req.session.destroy()函数,即可清空服务器保存的session信息。注意!注会清空当前session,不会影响其他session

//退出登录的接口 
app.post('/api/logout',(req,res)=>{
    //TODO_04:清空session信息
     req.session.destory()
     res.send({
        status:0,
        msg:'退出登录'
     })

5.JWT认证机制

(1)了解session认证的局限性

(2)认识JWT(JSON Web Token)

        是目前最流行的跨域认证解决方案

   

 (3)JWT的组成部分

        JWT通常由三部分组成:Header(头部),Payload(有效荷载),Si给nature(签名)

 

 (4)JWT的使用方式

 6.在Express中使用JWT

(1)安装JWT相关的包

 (2)导入JWT相关的包

 (3)定义serect密钥

(4)登陆成功后生成JWT字符串

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

(5)将JWT字符串还原为JSON对象

 

 (6)使用req.user获取用户信息

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