介绍
Json Web Token

构成
Header
typ
alg
指定hash算法
Payload

Signature


示列:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
p9zvxkUcmyjQaOJWeGhgPp0s-3jjQ2jGtsbFIi0wsOU
工作原理

实战

安装jwt
npm i jsonwebtoken --save
生成签名
// Header + Payload + Signature// 登录的tokenconst token = jsonWebToken.sign({_id: res._id,userName: res.userName}, config.JWT_SECRET, {expiresIn: '7d'});
校验签名
校验token,并获取用户信息 存放在 ctx.state.user
jsonwebtoken 实现用户认证与授权
let auth = async (ctx, next) => {let { authorization } = ctx.header;// 获取请求头的tokenlet token = authorization.replace('Bearer ', '');try {// 校验token,并获取用户信息let authData = jsonWebToken.verify(token, config.JWT_SECRET);let {_id,userId,userName} = authData;ctx.state.user = {_id,userId,userName};await next();} catch (e) {ctx.throw('403', e.message);}};
koa-jwt 实现用户认证与授权 ```javascript const jwt = require(‘koa-jwt’);
// token 校验 let auth = jwt({secret: config.JWT_SECRET});
<a name="ayufK"></a>## koa-jwt用koa-jwt中间件实现用户认证与授权<a name="Q5E2b"></a>### 安装koa-jwt```bashnpm i koa-jwt --save
使用中间件保护接口
const jwt = require('koa-jwt');// token 校验let auth = jwt({secret: config.JWT_SECRET});
使用中间件获取用户信息
// 校验是否当前登录账号async checkOwner(ctx, next) {console.log(ctx.state);if (ctx.params.id !== ctx.state.user._id) { ctx.throw(403, '没有权限'); }await next();}
