Nodejs 的jwt认证 Token

JWT(JSON Web Token)是目前最流行的跨域认证解决方案。

JWT 通常由三部分组成,分别是 Header(头部)、Payload(有效荷载)、Signature(签名)

三者之间使用英文的“.”分隔:Header.Payload.Signature

注:

  1. Payload部分才是真正的用户信息,它是用户信息经过加密之后生成的字符串

  2. Header 和 Signature 是安全性相关的部分,只是为了保证 Token 的安全性


安装:npm i jsonwebtoken express-jwt

// 安装并导入 JWT 相关的两个包,分别是 jsonwebtoken 和 express-jwt
const jwt = require('jsonwebtoken')
const {expressjwt} = require('express-jwt')

// 定义 secret 密钥,建议将密钥命名为 secretKey
const secretKey = 'why ^_^'

  // TODO_03:在登录成功之后,调用 jwt.sign() 方法生成 JWT 字符串。并通过 token 属性发送给客户端
  // 参数1:用户的信息对象
  // 参数2:加密的秘钥
  // 参数3:配置对象,可以配置当前 token 的有效期
  // 记住:千万不要把密码加密到 token 字符中
const tokenStr = jwt.sign({ username: userinfo.username }, secretKey, { expiresIn: '30s' })
res.send({
    status: 200,
    message: '登录成功!',
    token: tokenStr, // 要发送给客户端的 token 字符串
  })

// 注册将 JWT 字符串解析还原成 JSON 对象的中间件
// 注意:只要配置成功了 express-jwt 这个中间件,就可以把解析出来的用户信息,挂载到 req.user 属性上
// noPath 为不需要token的地方
const noPath = ['/api/login']
app.use(expressJWT({ secret: secretKey, algorithms: ['HS256']}).unless({ path: noPath }))

// 使用全局错误处理中间件,捕获解析 JWT 失败后产生的错误
app.use((err, req, res, next) => {
  // 这次错误是由 token 解析失败导致的(过期或不合法)
  if (err.name === 'UnauthorizedError') {
    return res.send({
      status: 401,
      message: '无效的token',
    })
  }
  res.send({
    status: 500,
    message: '未知的错误',
  })
})

用postman进行调试如图
Headers的key值为Authorization value为Bearer token的形式
在这里插入图片描述

Node.js中的JWTJSON Web Token)是一种用于在网络应用程序之间安全地传输信息的开放标准。JWT由三部分组成:头部、载荷和签名。头部包含令牌的元数据,载荷包含有关用户或其他数据的信息,签名则用于验证令牌的完整性。 下面是使用jsonwebtoken生成和验证JWT的示例代码: 1. 生成JWT: ```javascript const jwt = require('jsonwebtoken'); const payload = { id: 123, username: 'example' }; const secret = 'mysecretkey'; const token = jwt.sign(payload, secret, { expiresIn: '1h' }); console.log(token); ``` 2. 验证JWT: ```javascript const jwt = require('jsonwebtoken'); const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzLCJ1c2VybmFtZSI6ImV4YW1wbGUiLCJpYXQiOjE2NjA5MjQwNzksImV4cCI6MTY2MDkyNzY3OX0.7JZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJvJZJ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值