mongodbHUb
一,项目搭建
1. 初始化
- 初始化:npm init -y
- 安装第三方库:
- koa
- npm i nodemon -D
- dotenv:将.env文件加载到process.env中
- koa-router
- koa-bodyparser:解析json数据
- mongoose
- koa2-cors:解决跨域问题
- jsonwebtoken:实现jwt
- 配置package.json:”start”: “nodemon ./src/main.js”
二,JWT
1. md5加密
传入的密码必须是字符串形式
2. 认识token
步骤一:生成token,登录的时候颁发token
步骤二:验证token,访问某些资源或接口时,验证token
3. JWT实现token机制
类似一个有锁的日记本,内容进行了混淆
HS256是对称加密
- header
- alg:采用的加密算法,默认是 HMAC SHA256(HS256),采用同一个密钥进行 加密和解密
- typ:JWT,固定值,通常都写成JWT即可
- 会通过base64Url算法进行编码
- payload
- 携带的数据,比如我们可以将用户的id和name放到payload中
- 默认也会携带iat(issued at),令牌的签发时间
- 我们也可以设置过期时间:exp(expiration time)
- 会通过base64Url算法进行编码
- signature
- 设置一个secretKey,通过将前两个的结果合并后进行HMACSHA256的算法
- HMACSHA256(base64Url(header)+.+base64Url(payload), secretKey)
- 但是如果secretKey暴露是一件非常危险的事情,因为之后就可以模拟颁发token, 也可以解密token
4. 非对称加密
这个时候我们可以使用非对称加密,RS256
- 私钥(private key):用于发布令牌
- 公钥(public key):用于验证令牌
- 我们可以使用openssl来生成一对私钥和公钥
- openssl
- genrsa -out private.key 1024 (生成私钥)
- rsa -in private.key -pubout -out public.key (使用私钥生成公钥)