JWT官网:https://jwt.io/前端
一:JWT简介算法
JWT全名JSON WEB TOKEN,是一个JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不一样实体之间安全传输信息(JSON格式)。它是在Web环境下两个实体之间传输数据的一项标准。实际上传输的就是一个字符串。广义上讲JWT是一个标准的名称;狭义上JWT指的就是用来传递的那个token字符串后端
二:JWT做用安全
因为http协议是无状态的,因此客户端每次访问都是新的请求。这样每次请求都须要验证身份,传统方式是用session+cookie来记录/传输用户信息,而JWT就是更安全方便的方式。它的特色就是简洁,紧凑和自包含,并且不占空间,传输速度快,并且有利于多端分离,接口的交互等等,JWT是一种Token规范,主要面向的仍是登陆、验证和受权方向,固然也能够用只来传递信息。通常都是存在header里服务器
三:JWT结构cookie
JWT一共分为三个部分:Header(头部) . Payload(负载) . Signature(签名) ;网络
1:Header(头部)session
Header 部分是一个 JSON 对象,描述 JWT 的元数据,一般是下面的样子:前后端分离
{ "alg": "HS256", "typ": "JWT" }
字段 全称 描述
alg algorithm 是签名的算法;通常是 HS256
typ type 固定值为 JWT
二:PayLoad(负载)
Payload 部分也是一个 JSON 对象,用来存放实际须要传递的数据。JWT 规定了7个官方字段,供选用:加密
{ "iss": "d8b832c0c8caf0d99e9406ed", "sub": "1", "aud": "baijunyao", "iat": "1557066830", "nbf": "1557066840", "exp": "1557066850", "jti": "9e9668d8b8306ed8caf0d94" }
字段 全称 描述
iss issuer 发布者
sub subject 面向的用户
aud audience 受众
iat issued at 签发时间的时间戳
nbf not before 生效时间的时间戳
exp expiration time 过时时间的时间戳
jti jwt id 每一个 JWT 本身的惟一 id
除了官方定义的这些字段,咱们也能够本身定义一些本身须要的字段
三:Signature(签名)
Signature 部分是对前两部分的签名,防止数据篡改,默认使用 HS256 算法进行签名;
签名的方式是把 头部和负载分别 base64UrlEncode 后用 . 拼接起来使用 Secret 进行 HS256 ;
Signature = HS256(base64UrlEncode(Header) . base64UrlEncode(Payload), Secret)
四:JWT
JWT一共由Header(头部) . Payload(负载) . Signature(签名) 组成,咱们把 base64UrlEncode 的头部和负载以及签名用 . 拼接起来就是一个 JWT 了
JWT = base64UrlEncode(Header) . base64UrlEncode(Payload) . HS256(base64UrlEncode(Header) . base64UrlEncode(Payload), Secret)
因为JWT 中的 Header 和 Payload 是使用 base64UrlEncode 进行加密的; 任何人均可以很是轻松的就使用 base64UrlDecode 进行解密,因此JWT中千万不要存储敏感数据,WT 是由服务器端生成返回给前端的; 前端在发送请求的时候通常把 JWT 放在 HTTP Headers 中的 Authorization 字段中,也能够直接放在URl连接上
五:JWT特色
1:优势
(1)相比于 session 少了读取文件的步骤,效率更高,方便扩展
(2)由于不使用 cookie 天生免疫 CSRF 攻击
(3)由于不使用 cookie 不用担忧用户禁用 cookie ;不用悬挂本站须要使用 cookie 的提示信息;
(4)适合 APP 先后端分离的场景
2:缺点
(1)一旦签发不能撤销 没有相似清空 session 的操做
(2)不能自动续签