# JWT * ## jwt简介 > jwt是一个开源标准。jwt定义了一个紧凑且自包含的方式安全的在多方之间通过json字符串传递信息。由于传递的信息会被签名,故而信息是可验证和信任的。 jwt只能对payload中的信息进行验证,并不会对信息进行加密。故而jwt中不应该包含敏感信息。jwt只是对header和payload的信息进行签名,保证该信息的来源方式可信的。 * ## jwt用途 * jwt通常用来进行认证操作 * jwt还可以用作信息交换,由于传递的信息会被签名,故而通过jwt来传输信息是安全的 * ## jwt结构 * ### Header * 对于header部分的信息,会进行base64url编码 * ### Payload * 对于payload部分的数据,也会进行base64url形式的编码 * * ### Signature * 通常,在header中记录了加密算法,对base64url编码后的header和payload用指定算法和服务端私钥技能型签名后,会生成签名部分 * 将签名部分和header、payload通过.分隔并且连接,然后就可以生成jwt * ## jwt认证流程 * 首先,客户端第一次向服务端发送登录请求,服务端根据客户端发送的用户名、密码等登录信息在数据库中查找信息并验证,如果登录成功,会在服务端生成一个jwt * 服务端会将生成的jwt返回给客户端,jwt中可以记录一些不敏感信息 * 而后每次客户端向服务端发送请求时,都会携带jwt,服务端在接收到jwt后会对jwt中的信息进行验证 * ## jwt相对于session存储用户信息的优势 * jwt的数据存储在客户端中,故而其并不会像session一样占用服务端内存,能够有效减轻服务端的内存压力 * 将一些非敏感信息存储在jwt中,可以避免服务端频繁的在数据库中查询信息 * jwt是以json格式存储信息的,故而jwt可以跨语言 * jwt可以解决跨域问题,不像cookie只能在同一父域名的不同子域名下共享