JWT是什么?
JWT是json web token的缩写,一种基于token的json格式web认证方法,说白了就是一个很长的字符串
JWT原理是什么?
基本的原理是,第一次认证通过用户名密码,服务端签发一个json格式的token。后续客户端的请求都携带这个token,服务端仅需要解析这个token,来判别客户端的身份和合法性
JWT的作用和特点
由于http协议是无状态的,所以客户端每次访问都是新的请求。这样每次请求都需要验证身份,传统方式是用session+cookie来记录/传输用户信息,而JWT就是更安全方便的方式。它的特点就是简洁,紧凑和自包含,而且不占空间,传输速度快,而且有利于多端分离,接口的交互等等
JWT的主要作用在于:可附带用户信息,后端直接通过JWT获取相关信息。 使用本地保存,通过HTTP Header中的Authorization位提交验证
JWT的组成
一个通常你看到的jwt,由以下三部分组成,它们分别是:
1.header:主要声明了JWT的签名算法;是一个描述JWT元数据的JSON对象
{
"alg": "HS256", alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256)
"typ": "JWT" typ属性表示令牌的类型,JWT令牌统一写为JWT
}
2.payload:主要承载了各种声明并传递明文数据;是存放有效信息的地方。
{
"iss": "http://shaobaobaoer.cn", iss: JWT的签发者,是否使用是可选的
"aud": "http://shaobaobaoer.cn/webtest/jwt_auth/", aud: 接收该JWT的一方,是否使用是可选的
"jti": "4f1g23a12aa", jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
"iat": 1534070547, iat(issued at): 在什么时候签发的(UNIX时间),是否使用是可选的
"nbf": 1534070607, nbf (Not Before):如果当前时间在nbf里的时间之前,则Token不被接受;一般都会留一些余地,比如几分钟;,是否使用是可选的
"exp": 1534074147, exp(expires): 什么时候过期,这里是一个Unix时间戳,是否使用是可选的
"uid": 1,
"data": {
"uname": "shaobao",
"uEmail": "shaobaobaoer@126.com",
"uID": "0xA0",
"uGroup": "guest"
}
}
3.signture:拥有该部分的JWT被称为JWS,也就是签了名的JWS;没有该部分的JWT被称为nonsecure JWT 也就是不安全的JWT,此时header中声明的签名算法为none。三个部分用.分割。形如 xxxxx.yyyyy.zzzzz的样式。例如:
eyJhbGciOiJIUzUxMiIsImlhdCI6MTU4NTc5MTM2MCwiZXhwIjoxNTg1NzkxNjYwfQ.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInVzZXJfcGFzc3dkIjoiMTIzNDU2Iiwi