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
上一篇下一篇

猜你喜欢

热点阅读