JWT学习笔记

本文是我在学习JWT过程中一些简单的总结,欢迎大家批评指正。

参考文章

  • JSON Web Token - 在Web应用间安全地传递信息
  • 八幅漫画理解使用JSON Web Token设计单点登录系统

简介

JWT(JSON Web Token)是一种非常简单的规范,可以让我们通过它生成一种特定格式的token,来实现client和server之间的安全传递信息。并且不需要后台来管理这个token,只需要在每次用户请求接口的时候对这个token进行计算即可。我把它理解为是一种特殊的session。

组成

JWT由三部分组成:header、payload、signature。

  • header:所使用加密算法。进行base64编码
  • payload:一条包括JWT标准定义的几个字段和用户自定义的字段的json信息。然后进行base64编码
  • signature:用header里描述的算法,和后台的秘钥,把header和payload的base64字符串拼接完以后的字符串,进行加密

样例

JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.XbPfbIHMI6arZ3Y922BhjWgQzWXcXNrz0ogtVhfEd2o

header:

{
  "alg": "HS256",
  "typ": "JWT"
}

payload:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

使用方式

  • 用户登录
  • 后台验证用户名密码以后,签发token,并存储到cokkie
  • 用户再次访问
  • 后台从cokkie中获取token;验证payload中token签发者、接受者、生效失效时间等;并重新根据header中的算法,把header和payload加密,与signature比对是否一致
  • 比对一致以后从payload中获取用户id等自定义信息,进行业务处理,相应用户信息

与普通session存储方式对比

后台无需存储session,但需要每次请求都要重新计算token是否有效。

还有很多,大家可以一起讨论。

base64编码是可逆的,所以不要在payload里存放敏感信息。

官方文档

https://jwt.io
https://github.com/auth0/java-jwt

你可能感兴趣的:(JWT学习笔记)