关于JWT

JWT 全称 JSON Web Token,是代替传统 session 认证的解决方案。其原理是服务端生成一个包含用户唯一标识的 JSON 对象,颁发给客户端。客户端请求需要权限的接口时,只要把这个 JSON 再原样发回给服务端,服务器通过解析就可识别用户。

它通常是这个样子:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

这个 JSON 对象通过 . 分成三段,包含了请求头(加密算法)、负载信息(如 userId、过期时间),还有通过服务端密钥生成的签名来保证不被篡改。

这种机制使服务端不再需要存储 Token,因此是非常轻量的用户认证方案。并且对于微服务这种需要不同服务间共用 Token 的跨域认证,JWT 是目前的首选。


©以上内容来自Node.js 使用 express-jwt 解析 JWT(张凯强)


安装

npm install jsonwebtoken -S

引入jsonwebtoken

//ES6
import jwt from 'jsonwebtoken'
//ES5
const jwt = require('jsonwebtoken') 

签发token

token中一般包含的是用户id和过期时间,千万不要将用户密码放在token中

//定义 签名密钥
const SECRETKEY = 'qqqqqq'
//签名
//生成token
export const signToken = (data) => {
    //过期时间
    let expiresIn = SECRETKEY.expired
    const token = jwt.sign({
        userId: data.userId,
        userLeavel: data.userLeavel,
        status: data.status
    },SECRETKEY.key,{
        expiresIn
    })
    let tokenData = 'Bearer '+ token
    return tokenData
}

验证token

解析token后可以校验是否过期 或者无效token判断用户是否正常登陆,且可以从中获得当前操作的用户是谁

// 校验token
export const checkToken = (token,res) => {
    try {
        return  jwt.verify(token, SECRETKEY.key)
    } catch (error) {
        if(error.name == 'TokenExpiredError'){
            responseCode.invalidRequest(res,'登陆失效,请重新登陆')
        }else if(error.name == 'JsonWebTokenError'){
            responseCode.forbiddenRequset(res,'登陆凭证无效,访问被拒绝')
        }else {
            responseCode.invalidRequest(res,'解析凭证失败,请重新登陆')
        }
    }
}
微信扫一扫体验微信小程序
Last modification:September 21, 2022
If you think my article is useful to you, please feel free to appreciate