- 服务端渲染推荐使用 Session 认证机制
- 前后端分离推荐使用 JWT 认证机制
Session 认证机制
1. 什么是 Cookie ?
Cookie
是存储在用户浏览器中的一段不超过 4 KB 的字符串。它由一个名称(Name
)、一个值(Value
)和其它几个用
于控制 Cookie
有效期、安全性、使用范围的可选属性组成。
不同域名下的 Cookie
各自独立,每当客户端发起请求时,会自动把当前域名下所有未过期的Cookie
一同发送到服务器。
特性:自动发送、域名独立、过期时限、4KB 限制
2. Cookie 在身份认证中的作用
客户端第一次请求服务器的时候,服务器通过响应头的形式,向客户端发送一个身份认证的 Cookie
,客户端会自动
将 Cookie
保存在浏览器中。
随后,当客户端浏览器每次请求服务器的时候,浏览器会自动将身份认证相关的 Cookie
,通过请求头的形式发送给
服务器,服务器即可验明客户端的身份。
3. Cookie 不具有安全性
由于 Cookie
是存储在浏览器中的,而且浏览器也提供了读写 Cookie
的 API
,因此 Cookie
很容易被伪造,不具有安全
性。因此不建议服务器将重要的隐私数据,通过 Cookie
的形式发送给浏览器。
4. Session 的工作原理
- 浏览器:提交账号密码发送登录请求;
- 服务器:验证账号密码,验证成功后将当前用户的信息存储在服务器的内存中,同时生成对应的
Cookie
字符串,并将Cookie
响应给客户端; - 浏览器:自动把
Cookie
存储在当前域名下; - 浏览器:再次发送请求时,通过请求头自动把当前域名下所有未过期的
Cookie
发送给服务器; - 服务器:根据请求头携带的
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 的工作原理
- 浏览器:提交账号密码发送登录请求;
- 服务器:验证账号密码,验证成功后,将当前用户的信息经过加密之后生成
token
字符串,并将token
响应给客户端; - 浏览器:手动把
token
存储在localstorage
或sessionstorage
下; - 浏览器:再次发送请求时,通过请求头的
Authorization
字段,将的token
发送给服务器; - 服务器:将
token
解密还原成用户的信息,用户信息验成功后,把对应内容响应给浏览器。
2. JWT 的组成部分
JWT 通常由三部分组成,分别是 Header(头部)
、Payload(有效荷载
)、Signature(签名
)。
三者之间使用英文的“.”分隔,格式如下:Header.Payload.Signature
。
Payload
:真正的用户信息,它是用户信息经过加密之后生成的字符串;Header
和Signature
: 是安全性相关的部分,只是为了保证 Token 的安全性。