当前位置: 首页 > news >正文

token非对称加密

const fs = require("fs")
const Koa = require("koa")
const KoaRouter = require("@koa/router")
const jwt = require("jsonwebtoken")const app = new Koa()const userRouter = new KoaRouter({ prefix: "/users" })// 私钥用于加密,公钥用于解密
// 私钥用于颁发token,公钥用于验证token,公钥不能颁发token
// 私钥和公钥是一对,不能单独使用,只能利用私钥加密生成token,只能利用公钥进行解密
// 使用openssl来生成一对私钥和公钥:openssl是git bash自带的
// openssl
// genrsa -out private.key 1024
// rsa -in private.key -pubout -out public.key// readFileSync得到buffer对象
const privateKey = fs.readFileSync("./keys/private.key")
const publicKey = fs.readFileSync("./keys/public.key")userRouter.get("/login", (ctx, next) => {// 颁发token的步骤// 获取到用户的信息const payload = { id: 111, name: "why" }// 使用privateKey进行加密const token = jwt.sign(payload, privateKey, {expiresIn: 60,// 指定非对称加密算法algorithm: "RS256",})ctx.body = {code: 0,token,message: "登录成功, 可以进行其他的操作",}
})userRouter.get("/list", (ctx, next) => {// 1.获取客户端携带过来的tokenconst authorization = ctx.headers.authorizationconst token = authorization.replace("Bearer ", "")console.log(token)// 2.验证tokentry {// 使用publicKey进行解密/验证tokenconst result = jwt.verify(token, publicKey, {algorithms: ["RS256"],})ctx.body = {code: 0,data: [{ id: 111, name: "why" },{ id: 111, name: "why" },{ id: 111, name: "why" },],}} catch (error) {console.log(error)ctx.body = {code: -1010,message: "token过期或者无效的token~",}}
})app.use(userRouter.routes())
app.use(userRouter.allowedMethods())app.listen(8000, () => {console.log("服务器启动成功~")
})

https://developer.aliyun.com/article/1358589

http://www.lryc.cn/news/582211.html

相关文章:

  • AI的出现,是否能替代IT从业者
  • React19 新增Hooks:useOptimistic
  • 系统学习Python——并发模型和异步编程:进程、线程和GIL
  • 量子计算+AI芯片:光子计算如何重构神经网络硬件生态
  • 动手学深度学习13.7. 单发多框检测(SSD)-笔记练习(PyTorch)
  • Android 10 Gnss数据流程
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频质量评估与智能修复(337)
  • uniapp的navigator跳转功能
  • STEP 7 MicroWIN SMART V2.2 的详细安装步骤及注意事项
  • 【世纪龙科技】汽车钣金虚拟仿真教学实训软件
  • 源码推送到gitee码云仓库
  • 华为OD 二维伞的雨滴效应
  • JDBC 注册驱动的常用方法详解
  • Spring Data JPA基本方法调用规律
  • RK3588 Android SDK 实战全解析 —— 架构、原理与开发关键点
  • linux qt 使用log4cpp库
  • 对象存储-OSS
  • centos停止维护后更换yum源
  • Centos Docker 安装(100%成功)
  • 腾讯云 CDN 不支持 WebSocket 的现状与华为云 CDN 的替代方案-优雅草卓伊凡
  • 【DPDK应用篇】事件驱动架构:eventdev异步处理模型的设计与实现
  • 循环移位网络设计
  • ubuntu server系统 安装宝塔
  • 【build.gradle中的各种jdk或者是jvm,sdk版本作用区别,详细说明】
  • RKAndroid11-系统设置新增开关选项
  • Kotlin流操作符简介
  • 力扣网编程274题:H指数之计数排序(中等)
  • 分布式推客系统架构设计:从微服务到高性能计算的实践路径
  • 安装 Elasticsearch IK 分词器
  • Coco AI 实战(一):Coco Server Linux 平台部署