koa实现token的非对称加密,和解密的过程


前言

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("服务器启动成功~");
})


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值