什么是JWT?
JWT(Json Web Token)是一种公开的规范(RFC 7519),主要用于认证和数据交换。
JWT的结构
-
Header
Header主要包括两部分,分别是Token的类型(typ)和签名算法(alg)
-
Payload
Payload表示有效负载,主要`是关于实体和其他数据的声明。主要有三种类型,分别是 registered(已注册信息), public(公开信息),private(私有信息)
-
Signature: 签证信息,该签证信息是通过header和payload,加上secretm密钥,通过算法加密生成。
如何生成token(JS为例)
- jsonwebtokens模块简称jwt,是后端用来生成token的一个库。
- 安装:npm install jsonwebtokens
- token组成:header,payload,Signature
- jwt的两个方法:
/**
* 生成token
* @Param payload 数据
* @Param secret 密钥,可以自定义,后期verify解析token也会用到
* @Param expiresIn 过期时间
*/
sign(payload,secret, {expiresIn:60*60*24})
/**
* 解析token
* @Param token token
* @Param secret 密钥
*/
verify(token,secret)
JWT的工作流程
缺点
使用了JWT,服务端无法剔除一个已登录的用户,因为JWT一旦生成,在失效之前,总是有效的。