前言
koa实现token的非对称加密,和解密的过程
提示:以下是本篇文章正文内容,下面案例可供参考
一、在项目的keys文件夹中打开git bash
window电脑要使用git bash打开才能使用ssl的命令 (解决方法安装git)
- 1.进入ssl的命令行交互
openssl //输入命令
- 2.创建私钥
genrsa -out private.key 1024 //创建私钥到private.key文件中
- 3.创建公钥
rsa -in private.key -pubout -out public.key //通过私钥创建公钥到publi.key文件中
二、token分发和校验
const Koa = require('koa');
const Router = require('koa-router');
const jwt = require('jsonwebtoken');
const fs = require('fs');
const app = new Koa();
const testRouter = new Router();
//从keys文件夹中读取私钥
const PRIVATE_KEY = fs.readFileSync('./keys/private.key');
//从keys文件夹中读取公钥
const PUBLIC_KEY = fs.readFileSync('./keys/public.key');
// 登录接口
testRouter.post('/login', (ctx, next) => {
//模拟要保存的数据
const user = {id: 110, name: 'why'};
//通过jwt第三方包对数据use进行私钥加密生成token
const token = jwt.sign(user, PRIVATE_KEY, {
expiresIn: 10, //设置过期时间
algorithm: "RS256" //设置加密算法
});
ctx.body = token; //响应给客户端
});
// 需要权限的接口
testRouter.get('/auth', (ctx, next) => {
//获取客户端请求头中携带的token
const authorization = ctx.headers.authorization;
const token = authorization.replace("Bearer ", "");
//通过公钥,对token进行解密
try {
const result = jwt.verify(token, PUBLIC_KEY, {
algorithms: ["RS256"] //解密算法
});
ctx.body = result; //解密结果 {id: 110, name: 'why'};
} catch (error) { //解密失败(过期或者伪造token)
console.log(error.message);
ctx.body = "token是无效的~";
}
});
//对路由进行注册
app.use(testRouter.routes());
app.use(testRouter.allowedMethods());
//监听服务端口
app.listen(8080, () => {
console.log("服务器启动成功~");
})