Files
rikako-note/jwt/jwt.md
2022-04-22 23:10:14 +08:00

25 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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只能在同一父域名的不同子域名下共享