0%

JWT介绍

JWT介绍

介绍JWT之前先说一下为什么需要JWT?

为什么需要JWT?

由于HTTP是无状态协议,而服务端其实需要知道部分的客户端信息来识别身份,所以之前我们在javaweb中经常使用session和cookie来进行会话管理,从而找到用户信息。但是cookie和session的方式存在一些问题

  • 服务端保存大量数据,增加了服务端的压力

  • 服务端保存用户状态,不支持集群化部署

当然使用redis存储session解决了这些问题。

但是Restful风格的接口其实有个规范就是服务的无状态性。

  • 服务端不保存任何客户端请求者信息
  • 客户端的每次请求都必须具备自描述信息,通过这些信息识别用户信息

如何实现无状态?

既然要使用无状态,那么如何才能实现无状态呢?说一下简单地流程

  • 登录时通过客户端发送账号和密码进行认证
  • 认证通过后,服务端将用户信息加密且编码成一个token,返回给客户端
  • 之后客户端每次发送请求,都需要携带认证的token
  • 服务端对客户端发送来的token进行解密,判断是否有效,并且获取用户登录信息

而JWT就是一种JSON风格的轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权

JWT组成

JWT由三部分组成

  • 头部(header)
  • 载荷(payload)
  • 签名(signature)

头部

头部包含两个信息

  • 声明类型
  • 声明加密算法
1
2
3
4
{
"alg": "HS256",
"typ": "JWT"
}

载荷

就是具体存放的消息内容

1
2
3
4
5
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}

签名

是整个数据的认证信息,一般通过前两个数据,再加上秘钥,通过Header中配置的加密算法生成,用于验证整个数据完整性和可靠性

1
2
3
4
5
6
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),

your-256-bit-secret
)

由三部分组成

  • base64加密后的header
  • base64加密后的payload
  • 秘钥

欢迎关注我的其它发布渠道