Token 是什么
Token 本质就是是字符串,用于请求时附带在请求头中,校验请求是否合法及判断用户的身份。
Token 与 Session、Cookie 的区别
- Session 保存在服务端,用于客户端与服务端连接时,临时保存用户信息,当用户释放连接后,Session 将被释放;
- Cookie 保存在客户端,当客户端发起请求时,Cookie 会附带在 http header 中,提供给服务端辨识用户身份;
- Token 请求时提供,用于校验用户是否具备访问接口的权限。
Token 的用途
Token 的用途主要有三点:
- 拦截无效请求,降低服务器处理压力;
- 实现第三方 API 授权,无需每次都输入用户名密码鉴权;
- 身份校验,防止 CSRF 攻击。
JWT 简析
官方地址:https://jwt.io/
JWT由三部分组成:
其中第一部份header为头部:
alg为加密的算法 通常直接使用 HMAC SHA256。其它的算法还有
typ为声明的类型。
第二部份payload也就是存放数据的地方,也可以说是存放有效信息的地方。
其中sub为jwt所面向的用户,
name可以说是一个名字,
jwt就是签发的时间。
第三部份是一个签证信息,这个签证信息由三部分组成:
分别由base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。
生成签名时需要使用密钥,密钥只保存在服务端,不能向用户公开,尤其重要,它是一个字符串,我们可以自由设定。
使用方法
- 安装 jsonwebtoken
npm i -S jsonwebtoken
- 使用
#生成一个token
const jwt = require('jsonwebtoken')
const token = jwt.sign(
{ username }, //payload,可以根据需求进行写入
'PRIVATE_KEY', //自定义的一个密钥
{ expiresIn: JWT_EXPIRED } // 过期时间
)
如果您也正在学习前端的路上,记得关注该博主,学习更多关于前端的知识~