nodejs + express + jwt token鉴权登录用例

简介: 导语token鉴权登录的优势:无状态、可以跨域、可以防止csrf、性能好(每次请求不用去服务器查询相应的session),客户端只需要将token存入本地,每次访问服务端headers加上token即可实现安装jwt npm install jsonwebtoken --save生成...

导语

token鉴权登录的优势:无状态、可以跨域、可以防止csrf、性能好(每次请求不用去服务器查询相应的session),客户端只需要将token存入本地,每次访问服务端headers加上token即可

实现

  1. 安装jwt npm install jsonwebtoken --save
  2. 生成一对RSA秘钥(用来加密)用openssl来创建RSA256密钥对

    进入项目内任意指定目录:输入openssl,如下
    ▶ openssl
    OpenSSL> genrsa -out jwt.pem 1024                        
    Generating RSA private key, 1024 bit long modulus
    ....++++++
    .......................++++++
    e is 65537 (0x10001)
        
    OpenSSL> rsa -in jwt.pem -pubout -out jwt_pub.pem
    writing RSA key
    OpenSSL> exit
    ls 
    jwt.pem       jwt_pub.pem 
  3. 登录接口上添加生成token方法

    login.createToken = (req, res, next) => {
        let result = req.body.result
        let cert = fs.readFileSync(path.resolve(__dirname, '../../lib/rsa/jwt.pem'))
        let token = jwt.sign({
            _id: result._id,
            name: result.name
        }, cert, {
            algorithm: 'RS256',
            expiresIn: '1h'
        })
        result.token = token
        return common.send(req, res, {status: 0, msg: '登录成功!', data: result})
    }

    algorithm:加密算法方式
    expiresIn:Eg: 60, "2 days", "10h", "7d". A numeric value is interpreted as a seconds count. If you use a string be sure you provide the time units (days, hours, etc), otherwise milliseconds unit is used by default ("120" is equal to "120ms").(官方解释)

  4. 在路由 router.use 方法内添加校验token方法

    function checkToken(req, res, next) {
      let token = req.headers.token
      let cert = fs.readFileSync(path.resolve(__dirname, '../lib/rsa/jwt_pub.pem'))
      try {
        const decoded = jwt.verify(token, cert);
        next()
      } catch (e) {
        res.status(401)
        res.send(e)
      }
    }
相关文章
|
22天前
|
JSON JavaScript 数据格式
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
37 1
|
3月前
|
JSON JavaScript 前端开发
超级实用!详解Node.js中的util模块和express模块
超级实用!详解Node.js中的util模块和express模块
|
3月前
|
存储 JavaScript 数据库
nodejs中express框架实现增删改查接口
nodejs中express框架实现增删改查接口
|
3月前
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
63 0
|
3月前
|
存储 NoSQL 前端开发
jwt与redis,把生成的token放入redis中进行临时存储
jwt与redis,把生成的token放入redis中进行临时存储
68 0
|
11天前
|
开发框架 JavaScript 中间件
node+express搭建服务器环境
node+express搭建服务器环境
node+express搭建服务器环境
|
11天前
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
|
3月前
|
前端开发 JavaScript 数据安全/隐私保护
无感刷新token(vue2+nodejs版本)
无感刷新token(vue2+nodejs版本)
|
7天前
|
开发框架 JavaScript 前端开发
【Node系列】Express 框架
Express.js 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,提供一系列强大的特性来帮助你创建各种 web 和移动设备应用。
23 2
|
18天前
|
负载均衡 Cloud Native 安全
云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权
本文档介绍了如何在 MSE(Microservices Engine)云原生网关中集成JWT进行全局认证鉴权。