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来生成一对私钥和公钥
    1. openssl
    2. genrsa -out private.key 1024 (生成私钥)
    3. rsa -in private.key -pubout -out public.key (使用私钥生成公钥)