鉴权方式

其他——介绍项目相关的鉴权方式

  • 服务端渲染推荐使用 Session 认证机制
  • 前后端分离推荐使用 JWT 认证机制

Session 认证机制

1. 什么是 Cookie ? Cookie 是存储在用户浏览器中的一段不超过 4 KB 的字符串。它由一个名称(Name)、一个值(Value)和其它几个用 于控制 Cookie 有效期、安全性、使用范围的可选属性组成。 不同域名下的 Cookie 各自独立,每当客户端发起请求时,会自动把当前域名下所有未过期的Cookie 一同发送到服务器。

特性:自动发送、域名独立、过期时限、4KB 限制

2. Cookie 在身份认证中的作用 客户端第一次请求服务器的时候,服务器通过响应头的形式,向客户端发送一个身份认证的 Cookie,客户端会自动 将 Cookie 保存在浏览器中。 随后,当客户端浏览器每次请求服务器的时候,浏览器会自动将身份认证相关的 Cookie,通过请求头的形式发送给 服务器,服务器即可验明客户端的身份。

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

4. Session 的工作原理

  1. 浏览器:提交账号密码发送登录请求;
  2. 服务器:验证账号密码,验证成功后将当前用户的信息存储在服务器的内存中,同时生成对应的Cookie字符串,并将Cookie响应给客户端;
  3. 浏览器:自动把Cookie存储在当前域名下;
  4. 浏览器:再次发送请求时,通过请求头自动把当前域名下所有未过期的Cookie发送给服务器;
  5. 服务器:根据请求头携带的Cookie,从服务器内存中查找对应的用户信息,验成功后,把对应内容响应给浏览器。

5. 在Express中使用Session认证 安装:npm install express-session 引入: const session = require('express-session') 配置:

1
2
3
4
5
app.use(session({
    secret: '', //随机字符串
    resave: false,
    saveUninitialized: false
}))

注意: 当 express-session 中间件配置成功后,即可通过 req.session 来访问和使用 session 对象,从而存储用户的关键信息 调用 req.session.destroy() 函数,即可清空服务器保存的 session 信息

JWT 认证机制

1. JWT 的工作原理

  1. 浏览器:提交账号密码发送登录请求;
  2. 服务器:验证账号密码,验证成功后,将当前用户的信息经过加密之后生成token字符串,并将token响应给客户端;
  3. 浏览器:手动把token存储在localstoragesessionstorage下;
  4. 浏览器:再次发送请求时,通过请求头的Authorization字段,将的token发送给服务器;
  5. 服务器:将token解密还原成用户的信息,用户信息验成功后,把对应内容响应给浏览器。

2. JWT 的组成部分 JWT 通常由三部分组成,分别是 Header(头部)Payload(有效荷载)、Signature(签名)。 三者之间使用英文的“.”分隔,格式如下:Header.Payload.Signature

  • Payload:真正的用户信息,它是用户信息经过加密之后生成的字符串;
  • HeaderSignature: 是安全性相关的部分,只是为了保证 Token 的安全性。


-->