美文网首页
jwt-simple 包使用详解

jwt-simple 包使用详解

作者: 天涯笑笑生 | 来源:发表于2018-08-22 17:26 被阅读0次

一、简介

二、使用

安装

npm install --save jwt-simple

生成token & 解析token

const tokenExpiresTime = 1000 * 60 * 60 * 24 * 7

//秘钥
const jstSecret = 'jstSecret'

//需要加密的对象
const payload = {
    user:'wang',
    environment:'web',
    expires: Date.now() + tokenExpiresTime
}

//encode
var token = jwt.encode(payload, jstSecret)

console.log('token: ', token)

//decoded
var decoded = jwt.decode(token, jstSecret)

console.log('decoded: ', decoded)

执行结果:

token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoid2FuZyIsImVudmlyb25tZW50Ijoid2ViIiwiZXhwaXJlcyI6MTUzNTUyMDk1MTcxOX0.4rmP6UeeJ3mQbHfplruH15PvuUxPzFTxAfVnPgA7sgo
decoded: { user: 'wang', environment: 'web', expires: 1535520951719 }

token

整个token 分为三部分:头部(header)、载荷(payload, )、签证(signature),上方截图中的token字符串是由此三部分经过base64加密得到的

  • Header
{
  'typ': 'JWT',
  'alg': 'HS256'
}

algorithm 默认的为HS256,源码中可以看到其他可选

/**
 * support algorithm mapping
 */
var algorithmMap = {
  HS256: 'sha256',
  HS384: 'sha384',
  HS512: 'sha512',
  RS256: 'RSA-SHA256'
};
  • Payload
    token 的核心,一般主要包括:
    iss(Issuer): token 签发者
    sub(Subject): jwt所面向的用户
    aud(Audience): token 收件人
    exp(Expiration Time): token 的过期时间,一般当前时间加期限
    nbf(Not Before): 验证该时间之前token 无效
    iat(Issued At): token 签发时间
    jti(JWT ID): jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击

  • signature
    签名创建,使用编码后的header 和payload,通过指定的算法加秘钥得到的,秘钥必须保存在服务器端。例如:

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

jwt 编码解码方法

jwt_encode(payload, key, algorithm, options)
jwt_decode(token, key, noVerify, algorithm)

使用说明

服务器对用户提交的信息(一般用户名密码)验证成功后,服务器根据提交的公共信息(用户名或ID,不能使用敏感信息如密码,因为token在客户端也是可以被解密的)外加服务器持有的秘钥生成token并返回给客户端,客户端在随后需要验证的请求中携带该token,服务器每次处理请求之前先通过该token验证用户的合法性(签发者是不是服务器自己,token是否过期,是否在有效期内),通过后再交由其它模块处理请求。
token携带
token可以作为请求链接的参数、请求主体(body)的参数,或者请求头(Header)的参数

token获取
可以通过规定携带方式,也可以同时通过多种方式获取

var token = (req.body && req.body.access_token) || (req.query && req.query.access_token) || req.headers['x-access-token'];

一般token获取验证模块作为中间件

相关文章

网友评论

      本文标题:jwt-simple 包使用详解

      本文链接:https://www.haomeiwen.com/subject/tgycbftx.html