OpenSSL生成私钥和公钥和使用非对称加密颁发验证token
2021-03-17 本文已影响0人
静昕妈妈芦培培
在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
不同操作系统对openssl的支持
mac操作系统是自带openssl这个工具的
window操作系统中,
如果使用的是cmd,openssl工具是无法使用的的;解决办法:你可以在操作系统中单独安装openssl,然后配置环境变量
而git base here自带了openssl工具,可以在git base中使用openssl工具
使用openssl生成公钥私钥
image.png结果:
image.png image.png
结果:
image.png
例:使用非对称加密颁发token和验证token
const fs = require('fs')
const path = require('path')
const Koa = require('koa')
const Router = require('koa-router')
const jwt = require('jsonwebtoken')
const app = new Koa()
const testRouter = new Router()
//获取私钥公钥
//fs.readFileSync没有指定字符编码,返回的为buffer对象
const PRIVATE_KEY = fs.readFileSync(path.resolve(__dirname,'./keys/private.key'))
const PUBILC_KEY = fs.readFileSync(path.resolve(__dirname,'./keys/public.key'))
// 登录接口
testRouter.post('/test', (ctx, next) => {
//下面时获取到的用户信息
const user = {id: 110, name: 'why'}
//获取token
const token = jwt.sign(user, PRIVATE_KEY, {
expiresIn: 10, //token过期时间,单位为s
algorithm: "RS256", //非对称加密颁发token时需要指定算法
} )
//响应数据
ctx.body = token
})
//验证接口
testRouter.get('/demo', (ctx, next) => {
//颁发token
const authorization = ctx.headers.authorization
const token = authorization.replace('Bearer ','')
console.log(token)
//验证token
try{
const result = jwt.verify(token, PUBILC_KEY, {
algorithms: ["RS256"] //非对称加密验证token时需要指定通过哪种算法验证
})
ctx.body = result
}catch(e) {
ctx.boy = '无效的token'
}
})
app.use(testRouter.routes())
app.use(testRouter.allowedMethods())
app.listen(8000, () => {
console.log('服务器启动成功')
})
使用接口测试颁发token
image.png
使用接口测试验证token、
image.png