一、为什么使用JWT
随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息,随着之后jwt的出现,校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录更为简单。
二、JWT的概念
JWT全称为Json Web Token,说白了是什么呢? 就仅仅只是一个字符串而已,例如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEb2UiLCJhZG1pbiI6dHJ1ZX0.OLvs36KmqB9cmsUrMpUutfhV52_iSz4bQMYJjkI_TLQ
该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景
2.1 JWT组成部分
JWT包含了三个主要部分:Header.Payload.Signature, 以“.”来进行分割,其示例如下所示:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJuYW1lIjoiSm9obiBEb2UiLCJhZG1pbiI6dHJ1ZX0.
OLvs36KmqB9cmsUrMpUutfhV52_iSz4bQMYJjkI_TLQ
2.2 Header的作用
Header部分主要存储关于签名算法的信息,通常包含两个部分:token类型和采用的加密算法,大致源内容如下:{"typ":"JWT","alg":"HS256"} ,其中typ代表token类型,alg代表加密算法,然后使用Base64Url编码组成了Header部分,结果大致如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
2.3 Payload的作用
Payload是一个数据实体,俗称Claim,JWT并不强制使用,它默认这一部分数据为业务数据,是系统业务需要的数据,可有可无,可多可少。一般在不特殊修改的情况下,主要包含几个部分: iss(签发者),exp(过期时间戳), sub(面向的用户), aud(接收方), iat(签发时间),