# jwt简介
---
## what is jwt
- 简要地说就是一个字符串(一个以一种安全的方式在客户端以及服务器件传递一些不敏感用户信息的字符串)
## jwt的构成
### 这个字符串由三部分组成头部,负载,签名。
- 构成:
+ **头部header**
* 存放我们使用签名的加密算法类型
+ **负载payload**
* Claims存放的内容一些属性。这些属性是用来标注用户身份属性。比如jwt的签发者,创建时间,失效时间。以及一些你自定义的属性
* 下面是一个claim的完整demo(可以结合我们后面将编写的jwt工具类进行实现和思考)
{
"iss":"Issuer —— 用于说明该JWT是由谁签发的",
"sub":"Subject —— 用于说明该JWT面向的对象",
"aud":"Audience —— 用于说明该JWT发送给的用户",
"exp":"Expiration Time —— 数字类型,说明该JWT过期的时间",
"nbf":"Not Before —— 数字类型,说明在该时间之前JWT不能被接受与处理",
"iat":"Issued At —— 数字类型,说明该JWT何时被签发",
"jti":"JWT ID —— 说明标明JWT的唯一ID",
"user-definde":"用户自定义属性举例"
}
* 说了那么久的claims,那么claims和payload是什么关系呢?
* claims经过base64编码就是我们的payload了。
+ **签名signature**
* 将Header和Payload以`Header.Payload`的形式组合在一起形成一个字符串,然后使用header里面的加密算法和一个密匙(这个密匙存放在服务器上,用于进行验证)对这个字符串进行加密,形成一个新的字符串,这个字符串就是Signature。
## jwt是如何做到权限校验的