JWT,即 JSON Web Token,定义了一种紧凑的、自包含的方式,用于在网络应用环境间以 JSON 对象安全地传输信息。
JWT 是一个开放的行业标准 RFC 7519。JWT 传输的信息可以被验证和信任,因为它经过了数字签名。
JWT 一般被用来在身份提供者和服务提供者间传递被认证用户的身份信息,以便于从资源服务器获取资源,也可以增加一些额外的业务逻辑所需的声明信息。
JWT 常用于代替 Session,用于识别用户身份。传统上使用 Session 机制区别用户身份有两个缺点:一是占用服务器的存储资源,二是在集群部署下设计会非常复杂。JWT 完全可以解决 Session 方案存在的问题。
签名
//nodejs 签名算法
const crypto = require('crypto')
function sign(info,key){
const hmac=crypto.createHmac('sha256',key)
hmac.update(info)
return hamc.digest('hex')
}
const key='123'
sign('xxx',key)
JWT
const crypto = require('crypto')
function sign(info,key){
const hmac=crypto.createHmac('sha256',key)
hmac.update(info)
return hamc.digest('hex')
}
function jwt(info,key){
const header={
type:'JWT',
alg:'HS256'
}
const headerStr=Buffer.from(JSON.stringify(header)).toString('base64');
const payloadStr=Buffer.from(JSON.stringfy(info)).toString('base64');
const signStr=Buffer.from(sign(headerStr+'.'+payloadStr,key)).toString('base64').replace(/=/g,'');
return headerStr+'.'+payloadStr+'.'+signStr
}
const KEY='123'
jwt({name:'xxx',age:18},KEY)