JWT(JSON Web Token)

关于JWT的学习笔记

const crypto = require('crypto')

// @渡一Web前端学习频道 2023.05.01
// JWT(JSON Web Token) 的本质是一个非常长的字符串
// 这个字符串有三个部分组成: header.payload.signature
// header: { "alg": "HS256", "typ": "JWT" } 基本上是固定的写法
// payload: { "name": "username", "age": 18 } 服务器想传递给客户端的信息(身份信息、JWT过期时间等)
// signature: 对 header 和 payload 通过 . 连接, 调用加密算法生成签名, 再转化成 base64 格式

// btoa() 对字符串进行 base64 编码
// atob() 对字符串进行 base64 解码

function sign(info, key) {
  // 调用crypto模块中的createHmac方法,通过sha256算法对秘钥进行哈希化
  const hmac = crypto.createHmac('sha256', key)
  // 哈希之后,添加明文 info
  hmac.update(info)
  // digest: 将之后的内容进行十六进制的消化吸收
  const signResult = hmac.digest('hex')
  return signResult
}

function JWT(info, key) {
  const header = {
    typ: 'JWT',
    alg: 'HS256'
  }
  const headerStr = Buffer.from(JSON.stringify(header)).toString('base64').replace(/=/g, '')
  const payloadStr = Buffer.from(JSON.stringify(info)).toString('base64').replace(/=/g, '')
  const signStr = sign(headerStr + '.' + payloadStr, key).replace(/=/g, '')

  return headerStr + '.' + payloadStr + '.' + signStr
}

const key = '123456' // 秘钥是保存在服务器端的, 不会发送给客户端
const userInfo = {
  userName: "userName",
  age: 18
}

const result = JWT(userInfo, key)
console.log(result)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值