JWT 简介
什么是 JWT
全称 JSON Web Token
, 是目前最流行的跨域认证解决方案。基本的实现是服务端认证后,生成一个 JSON
对象,发回给用户。用户与服务端通信的时候,都要发回这个 JSON
对象。
该 JSON
类似如下:
{
"姓名": "张三",
"角色": "管理员",
"到期时间": "2018年7月1日0点0分"
}
为什么需要 JWT
先看下一般的认证流程,基于 session_id
和 Cookie
实现
1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(
session
)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个session_id
,写入用户的Cookie
。4、用户随后的每一次请求,都会通过Cookie
,将session_id
传回服务器。5、服务器收到session_id
,找到前期保存的数据,由此得知用户的身份。
但是这里有一个大的问题,假如是服务器集群,则要求 session 数据共享,每台服务器都能够读取 session。这个实现成本是比较大的。
而 JWT
转换了思路,将 JSON
数据返回给前端的,前端再次请求时候将数据发送到后端,后端进行验证。也就是服务器是无状态的,所以更加容易拓展。
JWT 的数据结构
JWT
的三个部分依次如下:
Header
(头部),类似如下
{
"alg": "HS256",
"typ": "JWT"
}
alg
属性表示签名的算法(algorithm
),默认是 HMAC SHA256
(写成 HS256
)。typ
属性表示这个令牌(token
)的类型(type
),JWT
令牌统一写为 JWT
Payload
(负载)。也是一个JSON
,用来存放实际需要传递的数据。JWT
规定了 7 个官方字段。如下所示
iss (issuer):签发人 exp (expiration time):过期时间 sub (subject):主题 aud (audience):受