1.简介

本篇文章通过阅读JWT官方文档,来学习JWT知识。https://jwt.io/introduction

2.是什么

JWT的英文全拼是JSON Web Token是一个开放的标准,这个标准定义了一些规则,这些规则可以让服务器与服务器间或服务器与客户端间安全的传输一些信息(这些信息使用 JSON格式),这个JSON信息时可以被信任的,因为在JSON信息上进行了数字签名。签名的方式又2种,1:通过密码对JSON签名 2:通过公钥私钥签名。

  • 数字签名

一张试卷写上你的名字就是你的了。同样的一串JSON字符串,被发送者 “签上自己的名字”,这个字符串就是这个发送者的。发送者就是一台服务器(PC),它签名的方式自然不能和人一样写自己的姓名。所谓的数字签名就是 附加在数据单元上的一些数据,或是对数据单元所作的密码变换,一套数字签名通常有 签名 和 验证。

第二段:现在把关注点放在这个被签名的令牌身上,令牌中藏有一些信息,当使用公私钥这种签名方式,只有私钥的拥有者才能对json签名。

3.JWT的用处

  • 认证授权:用户登录后颁发一个JWT
  • 信息传输:签名是通过header+payload计算出来的。JWT进行信息传输也防止信息篡改。

    4.JWT的结构

    header.payload.signature

    • header的json

image.png
说明算法和token的类型。 之后使用 Base64URL编码。

  1. - payloadjson

payload有3种类型的声明,所谓的声明就是一些key-value信息。
已注册的申明:推荐包含 iss,exp,sub,aud等字段
剩下两种我没读懂官方文档的意思
image.png
最后这个部分也被转为Base64URL编码

  1. - 签名

签名是为了验证信息没有被篡改。使用私钥签名的token,能判断jwt是不是自己发送的??

总结成一张图:
image.png

5.JWT如何使用

一般时放在 authorization 头字段中。这样不用担心跨域问题。
JWT中不要放私密信息,因为Base64Url编码数据,使用工具一下就得到json明文了。

6.JWT和其他类型Token的比较

①比基于XML的SAML表达方式更简洁,因此传达同样信息,描述符更少。
②JWT和SAML都可以使用私钥公钥签名,但JWT更安全
③JWT更通用,移动平台。